#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)
在上面运行gcc -E
可以:
main(){puts("argument""hello(""argument"")");}
正如您所看到的,发生的事情是q
宏的参数被转换为字符串(因为它被用作#k
– 这有时被称为“字符串化”)。 这里没有其他魔法。
以上就是c/c++开发分享你能帮我一个可以打印的简短代码吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560338.html