Каково значение управляющего символа » «, используемого в многострочных макросах C?

#c #macros #preprocessor

#c #макросы #препроцессор

Вопрос:

Я думал, что пробелы фактически не имеют значения в C. Отличается ли это для препроцессора? Почему нам нужно использовать » » при создании многострочных макросов?

Комментарии:

1. Препроцессор не может знать, где заканчивается ваш макрос, если он занимает более одной строки ( #end** для a нет #define : это однострочный). Символ показывает, что он продолжается на следующей строке.

Ответ №1:

Директивы препроцессора завершаются символом новой строки, поэтому в этом контексте новые строки отличаются от других пробелов.

Новые строки также различаются внутри // комментариев и строковых литералов. В обоих случаях для расширения лексемы можно использовать сращивание строк, хотя это не считается хорошим стилем.

Аналогичным образом, вы можете расширять строки препроцессора, используя многострочные комментарии, потому что комментарии заменяются пробелом перед распознаванием директив предварительной обработки. Это, вероятно, также было бы обескуражено руководствами по стилю, если бы они подумали об этом.