Я хочу иметь макрос SomeMacro (город, страна) в файле, который будет находиться в файле MacroFile.h, который я #include включаю из файла .h или .m. И я хочу, чтобы SomeMacro стал чем-то другим, в зависимости от того, является ли файл непосредственно над MacroFile.h в дереве включения файлом .h или .m. Я хочу сделать это без определения специальной константы в файле .m. Это возможно?
В псевдокоде я хочу, чтобы MacroFile.h сделал следующее:
#if (file from which I was directly included is a .h)
#define SomeMacro(city, country) SomeStuffInvolvingCityAndCountry
#else
#define SomeMacro(city, country) SomeDifferentStuffInvolvingCityAndCountry
#endif
SomeMacro(washington, USA)
SomeMacro(tokyo, Japan)
SomeMacro(berlin, Germany)
Бонусные баллы, если вы также можете получить MacroFile.h, чтобы проверить, что на два уровня выше него в дереве включения.
РЕДАКТИРОВАТЬ: Если у макроса есть способ узнать, вызывается ли он из блока @implementation или нет, этого было бы достаточно.