问题
For learning and demonstrating, I need a macro which prints its parameter and evaluates it. I suspect it is a very common case, may be even a FAQ but I cannot find actual references.
My current code is:
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
and then:
PRINT(x & 0x01);
It works fine but I am not sure of the legal status of the __STRING macro, specially since it is in the private __ namespace.
So, my questions:
- Is there a better way to write this macro?
- Is __STRING standard/great/evil?
- How to use existing search tools to find about __STRING? SO's search engine just searches anything containing string :-(
回答1:
You can use the # preprocessor token which converts its RHS argument to a string literal:
#include <stdlib.h>
#include <stdio.h>
#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))
int main(void)
{
int x = 7;
PRINT(x & 0x01);
return EXIT_SUCCESS;
}
2) It's definitely not standard, and this is the first time I've come across it; not surprising as it doesn't seem to do much more than the STR() macro above, at a first glance.
3) Google seems to work fine.
回答2:
Something like
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
is probably what you want. # is the stringification operator.
来源:https://stackoverflow.com/questions/377425/macro-which-prints-an-expression-and-evaluates-it-with-string