为什么返回值在c中包围256个左右

时间:2012-06-04 08:49:24

标签: c unix return-value

  

可能重复:
  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?

3 个答案:

答案 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