【问题标题】:Multiple preprocessor directives on one line in C++C ++中一行上的多个预处理器指令
【发布时间】:2010-08-20 15:21:10
【问题描述】:

一个假设的问题:是否有可能让一个包含预处理器指令的 C++ 程序完全放在一行上?

这样的一行应该是这样的:

#define foo #ifdef foo #define bar #endif

这样一行的语义是什么?

另外,有没有不可能在一行上构造的指令组合?

如果这是特定于编译器的,那么欢迎使用 VC++ 和 GCC 的答案。

【问题讨论】:

    标签: c++ c-preprocessor


    【解决方案1】:

    预处理指令必须以换行符终止,因此这实际上是一个定义类似对象的宏的单个预处理指令,名为foo,扩展为以下标记序列:

    # ifdef foo # define bar # endif
    

    以后在源代码中使用名称 foo(直到它是 #undefed)将扩展为此,但在宏扩展后,生成的标记不会作为预处理指令进行评估。

    这不是特定于编译器的;此行为由 C 和 C++ 标准定义。

    【讨论】:

      【解决方案2】:

      预处理器指令与语言语句有些不同,后者以; 终止并使用空格来分隔标记。在预处理器的情况下,指令以换行符终止,因此使用 C++ 语言本身无法执行您尝试的操作。

      您可以模拟这种情况的一种方法是将所需的行放入单独的头文件中,然后将#include 放在您想要的位置。单独的标题仍然必须在一行中包含每个指令,但是包含它的点只是一行,有效地按照您的要求进行。

      完成类似操作的另一种方法是在使用 C++ 编译器进行编译之前,使用外部进程将其处理为 C++ 源文件的 C++ 前文件。这可能比它的价值更麻烦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多