你能帮我一个可以打印的简短代码吗?

coq*_*qer 5 c macros

#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})
Run Code Online (Sandbox Code Playgroud)

这段代码可以在屏幕上打印出来,但是我很难阅读它,特别是那两个#K,它是如何工作的?我知道#define q(k)2*k是如何工作的,但我真的不知道关于这段代码.请帮我分析一下!谢谢!

Mat*_*Mat 9

简化调用并使用编译器的预处理器来查看正在发生的事情:

#define q(k)main(){puts(#k"hello("#k")");}
q(argument)
Run Code Online (Sandbox Code Playgroud)

运行gcc -E就可以了:

main(){puts("argument""hello(""argument"")");}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,发生的事情是q宏的参数被转换为字符串(因为它被用作#k- 有时称为"字符串化").这里没有其他魔法.