如下代码,大家认为它最终将输出什么,“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版结果竟然不一样,有点自相矛盾吧?