如下代码,大家认为它最终将输出什么,“12”还是“21”?
#include <stdio.h>
inline int test1 ()
{
printf ("1");
return 0;
}
int test2 ()
{
printf ("2");
return 0;
}
int main(int argc, char* argv[])
{
int nary [1];
*(nary + test1 ()) = test2 ();
return 0;
}
inline int test1 ()
{
printf ("1");
return 0;
}
int test2 ()
{
printf ("2");
return 0;
}
int main(int argc, char* argv[])
{
int nary [1];
*(nary + test1 ()) = test2 ();
return 0;
}
请分别编译debug和release版本运行。
下面公布测试结果:
| Debug Version | Release Version | Remark | |
| VC6 | 21 | 12 | |
| VC8 | 21 | 21 | |
| GCC | 21 | 21 | |
| G++ | 21 | 21 | |
| TCC | 12 | ||
| LCC | 12 | ||
谁对谁错呢?也许得到“21”或“12”都能说得过去吧?这种情形不知道C/C++标准有没有明确规定,请指教。
VC6的编译出的Debug版和Release版结果竟然不一样,有点自相矛盾吧?
783

被折叠的 条评论
为什么被折叠?



