是否有一种便携的方式来打印来自C预处理器的消息?

我希望能够做到这样的事情

#print "C Preprocessor got here!" 

用于debugging目的。 什么是最好的/最便携的方式来做到这一点?

warning指令可能是最接近的,但它不是完全平台无关的:

 #warning "C Preprocessor got here!" 

AFAIK这个工作在大多数编译器,除了MSVC,你必须使用pragma指示:

 #pragma message ( "C Preprocessor got here!" ) 

以下是MSVC和GCC支持的。

 #pragma message("stuff") #pragma message "stuff" 

Clang最近已经开始join支持, 在这里看到更多。

您可能想尝试: #pragma message("Hello World!")

大多数C编译器会识别#warning指令,所以

  #warning "Got here" 

还有标准的“#error”指令,

  #error "Got here" 

尽pipe所有的编译器都支持,但也会停止编译/预处理。

 #pragma message("foo") 

很好。 即使使用-Werror,也不会停止编译

另一个解决scheme是使用注释加上一个shell脚本来处理它们。 这需要一些纪律(或一个捕获错别字的shell脚本)。

例如,我添加格式为//TODO ,然后添加一个shell脚本,将它们全部收集到一个报告中。

对于更复杂的用例,您可以尝试编写自己的简单预处理器。 例如,您可以将源代码编辑为*.c2文件。 简单的预处理器将读取源文件,寻找//TODO ,并将printf("TODO ...")写入输出*.c文件。

你不能。 预处理器在C代码之前处理。 没有预处理指令可以打印到屏幕上,因为预处理程序代码没有执行,所以它被用来生成C代码,这些代码将被编译成可执行代码。

任何错误的:

 #ifdef ... printf("Hello"); #endif 

因为这就是预处理器所能做的。