#include <stdio.h>
#define print_int(a) printf("%s : %d\n",#a,(a))
int main(void) {
int y = 10;
print_int(y);
return 0;
}
我正在上课,并被要求解释为什么这很糟糕。所以我想字符串化#a是问题。它确实有效,那么为什么会有危险呢?
最佳答案
因为它绕过了类型安全性。当某人讨厌您并接受print_int("5412");
时会发生什么
#include <stdio.h>
#define print_int(a) printf("%s : %d\n",#a,(a))
int main(void) {
print_int("1123123");
return 0;
}
输出
$ gcc test.c
test.c: In function ‘main’:
test.c:4: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘char *’
$ ./a.out
"1123123" : 3870
关于c - 在定义中将#a字符串化,为什么不好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4868422/