我希望能够做一些像
#print "C Preprocessor got here!"
为了调试的目的。什么是最好的/最可移植的方式来做到这一点?
你不能。预处理器在 C 代码之前处理。没有打印到屏幕上的预处理器指令,因为预处理器代码没有执行,它用于生成将被编译成可执行代码的 C 代码。
有什么问题吗:
#ifdef ... printf("Hello"); #endif
因为预处理器只能做到这些。
warning指令可能是最接近的,但它并不完全独立于平台:
warning
#warning "C Preprocessor got here!"
AFAIK 适用于除 MSVC 之外的大多数编译器,对于 MSVC 你必须使用 pragma指令:
pragma
#pragma message ( "C Preprocessor got here!" )
你可以试试: #pragma message("Hello World!")
#pragma message("Hello World!")
The following are supported by MSVC, and 海湾合作委员会.
#pragma message("stuff") #pragma message "stuff"
Clang 最近开始增加支持,更多信息请参见 给你。
大多数 C 编译器都能识别 #warning指令,所以
#warning
#warning "Got here"
还有标准的“ # error”指令,
#error "Got here"
虽然所有编译器都支持这一点,但它也会停止编译/预处理。
#pragma message("foo")
工程伟大。也不会停止编译,即使你使用-错误
Another solution is to use comments plus a shell script to process them. This takes some discipline (or a shell script which catches typos).
例如,我添加了格式为 //TODO的注释,然后添加了一个 shell 脚本,该脚本将所有注释收集到一个报告中。
//TODO
对于更复杂的用例,您可以尝试编写自己的简单预处理器。例如,您可以将源代码编辑为 *.c2文件。简单的预处理器将读取源代码,查找 //TODO,并将 printf("TODO ...")写入输出 *.c文件。
*.c2
printf("TODO ...")
*.c