Я хочу использовать макрос, определенный в разных заголовочных файлах с тем же именем и разными реализациями. У меня есть два файла заголовка h1.h
и h2.h
. В первом файле заголовка я определил:Неопределенный макрос, определенный дважды
#define PRINT printf(" hi , macro 1\n");
и во втором файле заголовка
#define PRINT printf(" hi , macro 2\n");
в main()
, когда я пытаюсь использовать PRINT она печатается в зависимости от порядка включения. я нашел несколько подобных проблем, и они использовали обертку, включив первый файл заголовка, то определение линейного способа:
inline void print1() {
PRINT();
}
, а затем PRINT и не определенную в том числе второго файла заголовок. В main()
, когда я вызываю print1() и PRINT, я получил вывод от них обоих. Мой недостающий момент заключается в том, как после того, как мы определили PRINT из первого файла заголовка, который мы все еще можем его использовать, другими словами, что происходит, когда мы вызываем его внутри встроенной функции? Составил ли компилятор значение PRINT и назначил его функции и каким-то образом сохранил функцию?
Сюрприз сюрприз, вы используете препроцессор MACRO ... :-) –