diff --git a/C_C++/emil_header_guards/a.h b/C_C++/emil_header_guards/a.h
new file mode 100644
index 0000000..f8b412b
--- /dev/null
+++ b/C_C++/emil_header_guards/a.h
@@ -0,0 +1,11 @@
+#ifndef A_H
+
+#include "b.h"
+
+struct a {
+    int i;
+};
+
+
+#define A_H
+#endif
diff --git a/C_C++/emil_header_guards/ac.h b/C_C++/emil_header_guards/ac.h
new file mode 100644
index 0000000..e472d11
--- /dev/null
+++ b/C_C++/emil_header_guards/ac.h
@@ -0,0 +1,10 @@
+#ifndef A_H
+#define A_H
+
+#include "bc.h"
+
+struct a {
+    int i;
+};
+
+#endif
diff --git a/C_C++/emil_header_guards/b.h b/C_C++/emil_header_guards/b.h
new file mode 100644
index 0000000..2271b0e
--- /dev/null
+++ b/C_C++/emil_header_guards/b.h
@@ -0,0 +1,11 @@
+#ifndef B_H
+
+#include "a.h"
+
+struct b {
+    int i;
+};
+
+
+#define B_H
+#endif
diff --git a/C_C++/emil_header_guards/bc.h b/C_C++/emil_header_guards/bc.h
new file mode 100644
index 0000000..b246c89
--- /dev/null
+++ b/C_C++/emil_header_guards/bc.h
@@ -0,0 +1,11 @@
+#ifndef B_H
+#define B_H
+
+#include "ac.h"
+
+struct b {
+    int i;
+};
+
+
+#endif
diff --git a/C_C++/emil_header_guards/main.c b/C_C++/emil_header_guards/main.c
new file mode 100644
index 0000000..698a297
--- /dev/null
+++ b/C_C++/emil_header_guards/main.c
@@ -0,0 +1,12 @@
+// @BAKE gcc main.c -o $*.out
+#if 0
+# include "a.h"
+# include "b.h"
+#else
+# include "ac.h"
+# include "bc.h"
+#endif
+
+signed main() {
+    return 0;
+}