关于打印:是否有可移植的方式从 C 预处理器打印消息?

Is there a portable way to print a message from the C preprocessor?

我希望能够做类似

的事情

1
#print"C Preprocessor got here!"

用于调试目的。最好/最便携的方法是什么?


warning 指令可能是最接近您的指令,但它并不完全独立于平台:

1
#warning"C Preprocessor got here!"

AFAIK 这适用于除 MSVC 之外的大多数编译器,您必须在其上使用 pragma 指令:

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


MSVC 和 GCC 支持以下内容。

1
2
#pragma message("stuff")
#pragma message"stuff"

Clang 最近开始添加支持,请参阅此处了解更多信息。


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


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

1
 #warning"Got here"

还有标准的"#error"指令,

1
 #error"Got here"

虽然所有编译器都支持这一点,但它也会停止编译/预处理。


1
#pragma message("foo")

效果很好。即使您使用 -Werror

也不会停止编译


另一种解决方案是使用注释和 shell 脚本来处理它们。这需要一些纪律(或捕获拼写错误的 shell 脚本)。

例如,我添加了格式为 //TODO 的注释,然后添加了一个 shell 脚本,它将所有这些注释收集到一个报告中。

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


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

有什么问题:

1
2
3
#ifdef ...
printf("Hello");
#endif

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