Hmm. I tried to boil it down to the following:
#include <bar.h>
#include <foo.h>
int main(){}
#ifndef bar
#define bar
#include <foo.h>
#endif
#ifndef foo
#define foo
void f();
int x = 0;
#endif
This does compile --> I thought I understood it. Everything works but I would expect a compiler error. --> I can not reproduce the issue I was asking about. But obviously I still do not understand it.
In my understanding both foo and bar should contain a definition. Hence they should create a compiler error when I include both of them. Obviously they do not. Any hints on this? Did I understand it wrong again or is this something else I do not know?