【发布时间】:2013-11-29 03:25:08
【问题描述】:
考虑以下代码:
#include <stdio.h>
int main( )
{
int a ;
a = message( ) ;
printf("--%d",a);
}
message( )
{
printf("--%d",printf ( "\nViruses are written in C" ));
return ;
}
我得到的输出是:(在 GCC 中)
病毒是用c--25--4编写的
我的解释:return ;语句返回累加器中的值,最新的printf返回的值存储在累加器中...
这对不对?
【问题讨论】:
-
你的解释是错误的。 C 中没有“累加器”,标准也不允许空的
return返回有用的anything。编译错误会显示它是无效的代码,你得到的效果是未定义的行为。 -
@Jongware:将“
eaxon Intel 32-bit”替换为“Accumulator”并添加有关未定义行为的警告,对于 OP 正在使用的编译器,该解释非常正确。跨度> -
@RichieHindle:
eax和“英特尔”都不是 C 标准的一部分(任何,因为有几个)。 -
@Jongware:当然不是。因此“添加关于未定义行为的警告”和“对于 OP 正在使用的编译器”。仅仅因为某些东西不在规范中,并且不应该被依赖,并不意味着它不能被解释。
-
@RichieHindle 我在我的答案中添加了
Deep C幻灯片,这有助于从教育的角度理解这些事情。
标签: c function return printf undefined-behavior