Вопрос по c++, c-preprocessor – Несколько директив препроцессора в одной строке в C ++
======================================================================================

Гипотетический вопрос: возможно ли иметь программу на C ++, которая содержит директивы препроцессора, целиком в одну строку?

Такая строка будет выглядеть так:

Какова семантика такой линии?

Кроме того, есть ли комбинации директив, которые невозможно построить в одной строке?

Если это зависит от компилятора, то приветствуются ответы как на VC ++, так и на GCC.

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

Один из способов имитировать это - поместить нужные строки в отдельный заголовочный файл, а затем`#include` это где хочешь. Отдельный заголовок по-прежнему должен содержать каждую директиву в одну строку, но точка, в которую вы включаете ее, - это просто одна строка, эффективно выполняющая то, что вы просили.

Еще один способ добиться чего-то подобного - это иметь файл, предшествующий C ++, который вы используете для обработки в исходном файле C ++ с помощью внешнего процесса до компиляции с вашим компилятором C ++. Это, вероятно, гораздо больше проблем, чем оно того стоит.



й строки, так что это фактически единственная директива предварительной обработки, которая определяет объектоподобный макрос с именем`foo`, который расширяется до следующей последовательности токенов:

Любое последующее использование имени`foo` в источнике (пока не`#undef`ed) расширится до этого, но после раскрытия макроса полученные токены не будут оцениваться как директива предварительной обработки.

Это не зависит от компилятора; это поведение определяется стандартами C и C ++.