我最近遇到了这个混淆代码:
#include <stdio.h>
#define _____(i,s,o,g,r,a,m)(i##r##s##o)
#define _ _____(m,i,n,u,a,l,s)
int _()
{
printf("Hello World!");
return 0;
}
这里发生了什么? _()
main()
是怎样的?
编辑: 我一直在寻找这里使用过的“技术术语”。
答案 0 :(得分:5)
_
已被____(m,i,n,u,a,l,s)
____(m,i,n,u,a,l,s)
过滤的 ____(i,s,o,g,r,a,m)(i##r##s##o)
i##r##s##o
将参数i, r, s, o
粘贴在一起以形成文本。 i = m
,r = a
,s = i
,o = n
,因此您获得了main
此技术称为“标记粘贴”。它不是你每天都会使用的东西,但有时它会非常有用。有关令牌粘贴的信息,请参阅GCC的documentation。