#include - brackets vs quotes in XCode?
- by Chris Becke
In MSVC++ #include files are searched for differently depending on whether the file is enclosed in "" or <. The quoted form searches first in the local folder, then in /I specified locations, The angle bracket form avoids the local folder.
This means, in MSVC++, its possible to have header files with the same name as runtime and SDK headers.
So, for example, I need to wrap up the windows sdk windows.h file to undefine some macro's that cause trouble. With MSVS I can just add a (optional) windows.h file to my project as long as I include it using the quoted form :-
// some .cpp file
#include "windows.h" // will include my local windows.h file
And in my windows.h, I can pull in the real one using the angle bracket form:
// my windows.h
#include <windows.h> // will load the real one
#undef ConflictingSymbol
Trying this trick with GCC in XCode didn't work. angle bracket #includes in system header files in fact are finding my header files with similar names in my local folder structure.
The MSVC system means its quite safe to have a "String.h" header file in my own folder structre. On XCode this seems to be a major no no.
Is there some way to control this search path behaviour in XCode to be more like MSVC's? Or do I just have to avoid naming any of my headers anything that might possibly conflict with a system header. Writing cross platform code and using lots of frameworks means the possibility of incidental conflicts seems large.