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

大兔子大兔子 提交于 2019-12-17 03:34:29

问题


I would like to be able to do something like

#print "C Preprocessor got here!"

for debugging purposes. What's the best / most portable way to do this?


回答1:


The warning directive is probably the closest you'll get, but it's not entirely platform-independent:

#warning "C Preprocessor got here!"

AFAIK this works on most compilers except MSVC, on which you'll have to use a pragma directive:

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



回答2:


The following are supported by MSVC, and GCC.

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

Clang has begun adding support recently, see here for more.




回答3:


You might want to try: #pragma message("Hello World!")




回答4:


Most C compilers will recognize a #warning directive, so

 #warning "Got here"

There's also the standard '#error' directive,

 #error "Got here"

While all compilers support that, it'll also stop the compilation/preprocessing.




回答5:


#pragma message("foo")

works great. Also wouldn't stop compilation even if you use -Werror




回答6:


Another solution is to use comments plus a shell script to process them. This takes some discipline (or a shell script which catches typos).

For example, I add comments formatted //TODO and then a shell script which collects all of them into a report.

For more complex use cases, you can try to write your own simple preprocessor. For example, you could edit your sources as *.c2 files. The simple preprocessor would read the source, look for //TODO, and write printf("TODO ...") into the output *.c file.




回答7:


You can't. Preprocessors are processed before the C code. There are no preprocessor directives to print to the screen, because preprocessor code isn't executed, it is used to generate the C code which will be compiled into executable code.

Anything wrong with:

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

Because this is all you can do as far as preprocessors go.



来源:https://stackoverflow.com/questions/3826832/is-there-a-portable-way-to-print-a-message-from-the-c-preprocessor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!