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