В соответствии с ответом на этот вопрос, следующий код является законным:
#define three 3
#define nine three*3
int main()
{
std::cout << nine;
return 0;
}
И конечно, он компилируется и работает нормально. Однако в ответе на упомянутый вопрос также говорится, что нужно соблюдать порядок таких директив #define
, и тот, который будет использоваться в других #define
, должен быть определен перед ними. Но следующий код:
#define nine three*3
#define three 3
int main()
{
std::cout << nine;
return 0;
}
Также компилируется и работает отлично, и он печатает "9".
Является ли мой компилятор меня легко отключить, или порядок действительно не имеет значения С#defines, которые используют другие #define
s? Не будет ли компиляция неудачной в более сложном проекте?
Следует упомянуть то, что упомянутый вопрос говорит о C, а мой код - в С++. Это где (предполагаемые) различия в поведении происходят?