3.10.7 Переводы строк в аргументах
Вызов макроса, подобного функции, может занимать несколько логических строк. Однако в текущей реализации всё развёртывание происходит на одной строке. Таким образом, номера строк, выводимые компилятором или отладчиком, относятся к строке, в которой начался вызов, что может отличаться от строки, содержащей аргумент, вызывающий проблему.
Вот пример, иллюстрирующий это:
#define ignore_second_arg(a,b,c) a; c
ignore_second_arg (foo (),
ignored (),
syntax error);
Синтаксическая ошибка, вызванная токенами syntax error , приводит к сообщению об ошибке, указывающему на третью строку — строку ignore_second_arg, — хотя проблемный код находится на пятой строке.
Мы считаем это ошибкой и намерены исправить её в ближайшее время.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.1.0/cpp/Newlines-in-Arguments.html