За мои деньги, либо что-то не так перед этим кодом, либо есть пробелы после обратного слэса sh, либо есть другая неочевидная проблема. Когда я выбираю макрос в браузере, после третьего обратного знака sh появляются три пробела. Они формально завершают макрос Assert
и оставляют #
на следующей строке, чтобы вызвать ошибку. (Вне определения макроса символ #
не имеет никакого значения в C ++, кроме как для запуска директивы препроцессора.)
Я добавил канал в конце каждой строки.
#define Assert(expr, format, ...) \|
if(!(!!(expr))) \|
{ \ |
char message[4096] = #format; \|
}|
Удалите эти пробелы и посмотрите на ошибку vani sh. Не допускайте в своем коде конечных пробелов.
Когда я помещаю код, скопированный из вопроса, в файл pp71.cpp
и пытаюсь скомпилировать его в объектный файл (который будет пустым), я получаю:
$ g++ -O3 -g -std=c++11 -Wall -Wextra -Werror -c pp71.cpp
pp71.cpp:3:65: error: backslash and newline separated by space [-Werror]
3 | { \
|
cc1plus: all warnings being treated as errors
$
Это из G CC 9.2.0 на MacBook Pro с MacOS Catalina 10.15.3.