я не могу явно найти ответ на этот вопрос, кажется, работает на практике:Определить тело является еще определить
// example #1
#define test 5
#define test2 test
(test2 == 5) == true
И даже это:
// example #2
#define test2 test
#define test 5
Есть явное C правило спецификации, которое позволяет это. Я думал, что препроцессор довольно прост, и он просто находит/заменяет. Но я думаю, что в случае #define test2 test
он знает, что тест не является строкой, поэтому может быть define
? Итак, препроцессор выполняет множественные проверки только для этого типа сценария?
Мой главный вопрос, почему мой пример № 2 работает?
Он просто находит/заменяет в том порядке, в котором написано '# define's. Итак, это ожидаемое поведение. –
* «он знает, что тест не является строкой» * - препроцессор ничего не знает, кроме подстановки текста. –
@EdCottrell, см. Мой пример # 2. Где test2 определяется первым. Когда я печатаю test2, почему это получается как 5? Порядок определений сломает пример # 2. – jn1kk