1

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

4

3 回答 3

4

不幸的是,在基于 Unix 的系统中就是这种情况。main即使您将返回类型指定为 ,也无法返回 >255 的值int在这里阅读。

Windows 在它使用 32 位有符号整数作为退出代码的意义上更宽容

此外,您不能假设返回值始终是最后一个评估的表达式的值。如果没有显式return声明,则如何推断返回值取决于架构。例如,在 ARM 系统上,它的值在R0(或R0+R1有时)寄存器中,而在x86系统上,它的值是EAX寄存器。

于 2012-06-04T08:54:36.470 回答
3

不仅您没有指定返回类型,而且还缺少 return 语句。您不返回任何内容,因此程序返回的内容完全是随机的,无论函数退出时相关寄存器/内存位置发生了什么。

于 2012-06-04T08:52:22.217 回答
1

从 POSIX 页面:

status 的值可以是 0、EXIT_SUCCESS、EXIT_FAILURE、[CX] 或任何其他值,尽管只有最低有效 8 位(即 status & 0377)可供等待的父进程使用。

http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html

于 2012-06-04T09:03:17.987 回答