diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
index 5e425d65fa3cc2f4c8368ff6eb7c1c8e6340ff9d..3d806bc02eeae9170c1f7cc3a649c898d4738e01 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -176,6 +176,8 @@ asn1c_save_streams(arg_t *arg)  {
 		"#define\t_%s_H_\n"
 		"\n", header_id, header_id);
 
+	fprintf(fp_h, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n");
+
 	fprintf(fp_h, "#include <constr_TYPE.h>\n\n");
 
 	TQ_FOR(ot, &(cs->targets[OT_DEPS]), next)
@@ -195,7 +197,9 @@ asn1c_save_streams(arg_t *arg)  {
 
 	assert(OT_MAX == 5);
 
-	fprintf(fp_h, "\n#endif\t/* _%s_H_ */\n", header_id);
+	fprintf(fp_h, "\n#ifdef __cplusplus\n}\n#endif\n\n"
+			"#endif\t/* _%s_H_ */\n",
+		header_id);
 
 	fclose(fp_c);
 	fclose(fp_h);