зло макросов может быть усугублено:
file1.c
#define bottom arse
file2.c
int f()
{
int arse = 4;
bottom = 3;
printf("%d", arse);
}
main.c
#include "file1.c"
#include "file2.c"
void main()
{
f();
}
Действительно запутанный пример. Но обычно вы этого не замечаете, поскольку область действия макроса - это файл, в котором он находится.
Я действительно получил эту ошибку, я импортировал некоторый lib-код в новый проект и не мог потрудиться написать Makefile, поэтому я просто сгенерировал all.cpp, который включал все исходники из библиотеки. И это не сработало, как ожидалось из-за макро-загрязнения. Мне понадобилось время, чтобы понять это.