Рассмотрим следующий код С++:
#include <bits/stdc++.h>
using namespace std;
string TRUE = "true";
string FALSE = "false";
#define TRUE FALSE
#define FALSE TRUE
int main()
{
cout << TRUE << endl;
cout << FALSE << endl;
}
Скомпилированный с использованием GCC 4.9.2, приведенные выше выходы кода:
true
false
Какова логика выпускаемой продукции? Я ожидал "false\ntrue\n" или даже "false\nfalse\n", но я не могу найти аргументы за этот фактический вывод.
Как работает пара #defines в этом случае?