[英]Multiple preprocessor directives on one line in C++
一个假设的问题:是否有可能将包含预处理器指令的 C++ 程序完全放在一行中?
这样的一行看起来像这样:
#define foo #ifdef foo #define bar #endif
这条线的语义是什么?
此外,是否存在不可能在一行中构建的指令组合?
如果这是特定于编译器的,那么欢迎使用 VC++ 和 GCC 答案。
预处理指令必须以换行符结束,所以这实际上是一个单独的预处理指令,它定义了一个类对象宏,名为foo
,扩展为以下标记序列:
# ifdef foo # define bar # endif
以后在源代码中使用名称foo
(直到它被#undef
编辑)将扩展为此,但是在扩展宏之后,生成的标记不会被评估为预处理指令。
这不是特定于编译器的; 此行为由 C 和 C++ 标准定义。
预处理器指令与语言语句有些不同,语言语句以;
终止。 并使用空格来分隔标记。 在预处理器的情况下,该指令以换行符终止,因此不可能使用 C++ 语言本身来执行您尝试执行的操作。
您可以模拟这种情况的一种方法是将所需的行放入单独的头文件中,然后将其#include
到您想要的位置。 单独的标头仍然必须将每个指令放在一行中,但是您包含它的地方只是一行,可以有效地执行您的要求。
完成类似任务的另一种方法是在使用 C++ 编译器进行编译之前,使用外部进程将 C++ 前文件处理成 C++ 源文件。 这可能比它的价值更麻烦。
一个假设的问题:是否有可能在一行中包含一个包含预处理器指令的 C++ 程序?
这样的一行看起来像这样:
#define foo #ifdef foo #define bar #endif
这样一行的语义是什么?
此外,是否存在无法在一行中构建的指令组合?
如果这是特定于编译器的,那么欢迎 VC++ 和 GCC 答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.