bor*_*yer 6 c expression-evaluation
为了学习和演示,我需要一个宏来打印其参数并对其进行评估.我怀疑这是一个非常常见的情况,甚至可能是常见问题,但我找不到实际的参考.
我目前的代码是:
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
Run Code Online (Sandbox Code Playgroud)
然后:
PRINT(x & 0x01);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我不确定__STRING宏的合法状态,特别是因为它在private __命名空间中.
所以,我的问题:
cod*_*gic 13
就像是
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
Run Code Online (Sandbox Code Playgroud)
可能就是你想要的.#是字符串化运算符.
aib*_*aib 10
您可以使用#preprocessor令牌将其RHS参数转换为字符串文字:
#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;
}
Run Code Online (Sandbox Code Playgroud)
2)这绝对不是标准,这是我第一次遇到它; 这并不奇怪,因为它似乎没有比上面的STR()宏做得更多,乍一看.
3)谷歌似乎工作正常.