【发布时间】:2012-06-08 08:49:20
【问题描述】:
可能重复:
What is the valid range for program return value in Linux/bash?
这是一个简单的c程序:
#include <stdio.h>
int main(){
int a=0, b=100;
while(a<=b){
printf("%d\n",a);
a+=10;
}
return a;
}
在 linux 上检查返回值会得到 110,这是预期的,因为程序中评估的最后一个表达式是将 110 赋值给 a; 但是当我用大于 256 的东西替换 b=100 时,说 b=260;返回值为 14 而不是预期的 270。 为什么 main 应该返回范围远大于 256 的整数时,返回值会环绕 256?
【问题讨论】:
-
therefromhere ,感谢您的链接.. 这确实是同一个问题。 :-)
-
由于您没有明确的 return 语句,因此实际值未定义。在大多数情况下,它将是某个特定结果寄存器或累加器中的值,但不能保证这一点,例如始终输出零同样有效。这个问题在明确的 return 语句中同样有效,而且不那么模棱两可。在 C not 中,对于非 void main 具有显式返回语句也是无效的,并且在 C++ 中,在任何情况下具有隐式返回类型都是无效的,因此这是无效的两种语言的代码。
-
@Clifford:自C99以来,到达
main中的终止},如果返回类型与int兼容,则返回0。如果返回类型与@987654327不兼容@,返回状态未指定。很多人写了main却没有返回,现在在main中没有一个是合法的。 -
@Daniel:我的立场是正确的,但如果不依赖此代码,代码也可以证明这个问题。
标签: c unix return-value