Я пытаюсь построить Амайю. Когда сбой сборки произошел с
error: ожидаемый unqualified-id before '(токен
Я выполнил g++ только с препроцессором (заменив параметр -c на -E) в файле, который не удалось скомпилировать, чтобы посмотреть, что происходит. Это создало файл в 80 000 строк, показывая мне, что "синий" был заменен на (2 < 8), что ясно объясняет ошибку. Если я исправлю это, файл компилируется отлично. Думаю, я мог бы жить с этим, но я хотел бы узнать, почему это происходит.
Есть ли способ отслеживать, как препроцессор заменяет определенную строку, в данном случае "Синий"?
================= Обновление ===================
Ну, я нашел виновника:
> headers=`g++ [omited for brevity] -M \
../../thotlib/dialogue/AmayaClassicNotebook.cpp`
> for file in $headers ; do grep -s -H Blue $file | grep "(2 << 8)";done
/usr/local/include/gc.h:#define Blue (2 << 8)
Таким образом, добавление #undef Blue исправило проблему. Поэтому использование этой комбинации -M и grep кажется ОК, но иногда определения препроцессора С++ могут быть реальным лесом; Мне было любопытно, есть ли какой-нибудь лучший способ, возможно, какой-то умный инструмент GNU.