duk*_*ave 12 c++ c-preprocessor
一个假设的问题:是否有可能在一条线上拥有一个包含预处理器指令的C++程序?
这样的一行看起来像这样:
#define foo #ifdef foo #define bar #endif
Run Code Online (Sandbox Code Playgroud)
这种线的语义是什么?
此外,是否有任何指令组合在一条线上无法构建?
如果这是特定于编译器的,则欢迎使用VC++和GCC答案.
Jam*_*lis 13
预处理指令必须以换行符终止,因此这实际上是一个预处理指令,它定义了一个类似于对象的宏foo,它扩展为以下标记序列:
# ifdef foo # define bar # endif
Run Code Online (Sandbox Code Playgroud)
以后foo在源中使用该名称(直到#undef编辑)将扩展为此,但在扩展宏之后,生成的标记不会被评估为预处理指令.
这不是特定于编译器的; 此行为由C和C++标准定义.
预处理程序指令与语言语句略有不同,语句语句由;空格终止并使用空格来分隔标记.对于预处理器,指令由换行符终止,因此无法执行您尝试使用C++语言本身的操作.
您可以模拟这种方法的一种方法是将所需的行放入单独的头文件中,然后将#include其放在您想要的位置.单独的标题仍然必须在一行上包含每个指令,但是包含它的点只是一行,有效地执行您的要求.
另一种实现此类目标的方法是在使用C++编译器进行编译之前,使用一个前C++文件,使用外部进程处理成C++源文件.这可能比它的价值更麻烦.