为何C语言程序返回值会在0-255区间循环?
C程序返回值的循环现象解释
示例程序
程序1
#include<stdio.h> int main() { printf("Hey I am returning the value\n"); return 0; }
程序2
#include<stdio.h> int main() { printf("Hey I am returning the value\n"); return 255; }
程序3
#include<stdio.h> int main() { printf("Hey I am returning the value\n"); return 258; }
执行结果
在Ubuntu系统中运行上述程序后,通过echo $?命令查看返回值:
- 程序1返回
0 - 程序2返回
255 - 程序3返回
2
循环现象的原因
这是因为类Unix系统(比如Ubuntu)的进程退出状态码只会保留低8位数据,也就是一个字节的范围,对应数值0-255。当main函数返回的整数超出这个范围时,系统会自动对该值做模256运算,只取运算结果的低8位作为最终的退出状态码。
拿程序3的返回值258举例:258除以256商1余2,最终退出状态码就是2;如果返回256,模256的结果是0;返回257的话结果是1,以此类推,看起来就像是数值超过255后会在0-255区间内循环。
本质原因是Unix系统的进程退出状态机制仅用8位存储状态值,所以任何超出0-255范围的返回值都会被截断到这个区间内。
内容的提问来源于stack exchange,提问作者ASWIN
相关产品推荐
相关产品推荐

