#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})
这段代码可以在屏幕上打印出来,但是,我读起来有困难,尤其是那两个#K,它是如何工作的?我知道#define q(k) 2*k 是如何工作的,但我真的不知道关于这段代码,请帮我分析一下!谢谢!
简化调用并使用编译器的预处理器来查看发生了什么:
#define q(k)main(){puts(#k"hello("#k")");}
q(argument)
Running gcc -E
就给你:
main(){puts("argument""hello(""argument"")");}
正如你所看到的,所发生的情况是,q
宏被转换为字符串(因为 is 被用作#k
- 这有时称为“字符串化”)。这里没有其他魔法发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)