我一直在尝试一些代码混淆的比赛(我知道这不是一个好的编程实践,但它是一个挑战我和一个朋友竞争,所以没有必要指出明显的),并在其中一个,我发现表达式有以下奇怪的行为(代码已减少到仍然重现行为的行为)t-scanf("%d",t--?&N:&t):
int main(int t, int N){
printf("%d\n",t-scanf("%d",t--?&N:&t));
}
int main(int t, int N){
printf("%d\n",t-scanf("%d",t--?&N:&t)==0);
}
int main(int t, int N){
printf("%d\n",t-scanf("%d",t--?&N:&t)!=0);
}
Run Code Online (Sandbox Code Playgroud)
如果我执行第一个部分,将打印0,即表达式的计算结果为0.
在第二个上,将打印0,即表达式不计算0.
在第三个,将打印1,这意味着表达式不会计算为0.
所以问题是:这些代码有什么问题?