繁体   English   中英

C++ 一行中的多个预处理器指令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM