可能重复:
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?
答案 0 :(得分:4)
不幸的是,基于Unix的系统就是这种情况。即使您将返回类型指定为main
,也无法从int
返回值> 255。阅读here。
Windows在使用32位有符号整数作为退出代码
的意义上更宽松此外,您不能假设返回值应始终是最后一个表达式的值。如果没有明确的return
语句,则推断返回值的方式取决于体系结构。例如,on ARM systems,其值R0
(或有时R0+R1
)注册,x86
系统注册EAX
。
答案 1 :(得分:3)
这不只是你没有指定一个返回类型,你也错过了return语句。你不返回任何东西,所以程序返回的内容完全是随机的,无论在函数退出时发生在相关的寄存器/内存位置。
答案 2 :(得分:1)
从POSIX页面:
status的值可以是0,EXIT_SUCCESS,EXIT_FAILURE,[CX]或任何其他值,但只有最低有效8位(即状态&amp; 0377)可用于等待的父进程。
http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html