问题
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