代码之家  ›  专栏  ›  技术社区  ›  davetapley

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

  •  11
  • davetapley  · 技术社区  · 15 年前

    一个假设性的问题:有可能有一个C++程序,包括预处理器指令,完全在一行上吗?

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

    #define foo #ifdef foo #define bar #endif
    

    这样一行的语义是什么?

    此外,是否有任何指令组合不可能在一条线上构建?

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

    2 回复  |  直到 8 年前
        1
  •  13
  •   James McNellis    15 年前

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

    # ifdef foo # define bar # endif
    

    以后用这个名字吗 在源头(直到它 #undef ed)将扩展到该值,但在宏展开后,生成的标记不会作为预处理指令进行计算。

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

        2
  •  7
  •   Mark B    15 年前

    预处理器指令与语言语句稍有不同,后者由 ; 并使用空格分隔标记。在预处理器的情况下,指令被换行终止,因此不可能用C++语言本身来做。

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

    另一种实现这种方式的方法是使用一个C++前文件,在编译C++编译器之前,使用一个外部进程将其处理成C++源文件。这可能比它的价值更麻烦。