【发布时间】:2016-08-26 15:57:19
【问题描述】:
我找到了这个 C 代码示例,我非常困惑:
#include <stdio.h>
#define M(a,b) a%:%:b
main()
{
int a=1, b=2, ab[]={10,20}, c;
printf( "%d", M(a,b)<:a:> );
printf( "%d", M(a,b)<:a:>?a:b );
printf( "%d", c=M(a,b)<:a:>?a:b );
}
有人能解释一下这应该做什么吗?它甚至不能在 Visual Studio 中编译,但我在线运行它(在 ideone.com 上)并打印了 2011,这也增加了混乱。
【问题讨论】:
-
这是来自混淆 C 竞赛吗?
-
无法解释,也没见过。它在 osx/darwin/unix 中编译。仅供参考,第一行评估并打印
20,第二行1,第三行1。 -
@GSerg:这些是 digraphs 而不是 trigraphs。尽管它们是相关的,但我认为这并不是一个真正的骗局。
-
@GSerg 将许多不同的混淆合并为一个 goo 的问题对于重复问题非常不利。而是将其作为副本关闭。
标签: c macros preprocessor-directive