知道这一点后就可以理解这个调用了:
它等价于:
char *p=(x%2)?("**%d"):("##%d\n")
printf(p,x)
明白了吗,如果不明白,那么进一步等价于(虽然语法上可能不怎么正确,但是这里要说明的是它的算法):
char *p
if (x%2!=0) p="**%d"
else p="##%d\n"
printf(p,x)
a 是格式化字符串, 替换后程序实际打印为:printf( "main() {char*a=%c%s%cprintf(a,34,a,34)}", 34, "main() {char*a=%c%s%cprintf(a,34,a,34)}", 34 )
34的ASCII是双引号,最后打印为
main() {char*a="main() {char*a=%c%s%cprintf(a,34,a,34)}",34)}
理解上应该不是很困难,不过看上去比较复杂而已