use*_*743 5 c printf c-preprocessor
#include <stdio.h>
#define print_int(a) printf("%s : %d\n",#a,(a))
int main(void) {
int y = 10;
print_int(y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在上课,并被要求解释为什么这很糟糕。所以我想字符串化#a是问题。它确实有效,那么为什么会有危险呢?
因为它绕过了类型安全。当有人讨厌你并离开时会发生什么print_int("5412");
#include <stdio.h>\n#define print_int(a) printf("%s : %d\\n",#a,(a))\nint main(void) {\n print_int("1123123");\n return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n输出
\n\n$ gcc test.c \ntest.c: In function \xe2\x80\x98main\xe2\x80\x99:\ntest.c:4: warning: format \xe2\x80\x98%d\xe2\x80\x99 expects type \xe2\x80\x98int\xe2\x80\x99, but argument 3 has type \xe2\x80\x98char *\xe2\x80\x99\n$ ./a.out \n"1123123" : 3870\n
Run Code Online (Sandbox Code Playgroud)\n