是否有一种便携的方式来打印来自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
因为这就是预处理器所能做的。