Let’s assume I define BAR in foo.h. But foo.h might not exist. How do I include it, without the compiler complaining at me?
#include "foo.h"
#ifndef BAR
#define BAR 1
#endif
int main()
{
return BAR;
}
Therefore, if BAR was defined as 2 in foo.h, then the program would return 2 if foo.h exists and 1 if foo.h does not exist.
In general, you’ll need to do something external to do this – e.g. by doing something like playing around with the search path (as suggested in the comments) and providing an empty
foo.has a fallback, or wrapping the#includeinside a#ifdef HAS_FOO_H…#endifand settingHAS_FOO_Hby a compiler switch (-DHAS_FOO_Hfor gcc/clang etc.).If you know that you are using a particular compiler, and portability is not an issue, note that some compilers do support including a file which may or may not exist, as an extension. For example, see clang’s
__has_includefeature.