Main函数返回将不会返回高整数

main function return will not return high integer

本文关键字:返回 整数 高整数 函数 Main      更新时间:2023-10-16

我的程序是这样的我想调用这个程序:

int main(int argc,char *argv[]) {
    int x = atoi(argv[1]);
    return x;
}

用另一个程序调用该程序,并给它一个int形参。当x很低的时候效果很好但是假设x = 1000那么它会返回一个小数值

main的返回值传递给exit函数

exit函数的参数被声明为int,您可以合法地传递任何int值给它。在类unix系统上,除了低阶8位外,参数的所有部分都被忽略。例如,exit(INT_MAX);是完全合法的,但它相当于exit(255);(或exit(-1);)。

在Windows中,你有32位,但是一个特定的值(STILL_ACTIVE = 259,意味着进程仍在运行),你必须避免刚好超过字节值范围。


c++标准只定义了三个可能的值:0(表示成功), EXIT_SUCCESS EXIT_FAILURE ,后两个宏符号来自<stdlib.h>(也声明了exit函数)。

在Unix-land和Windows中,EXIT_SUCCESS被定义为0,这是标准允许的。

不幸的是,在Windows中,通常使用进程退出代码来通信低级错误代码,EXIT_FAILURE通常/总是定义为1而不是E_FAIL。这意味着,即使对于文档记录为返回错误代码或HRESULT作为退出代码的程序,也必须注意值1。可能只是EXIT_FAILURE

在Posix和Unix系统上,main的返回值主要是0(即EXIT_SUCCESS)和非0(例如EXIT_FAILURE,即1),并且正如其他人解释的那样,只有较低的字节才重要。这是每个shell都可以很容易地处理的(例如,if&&);要在shell中获得退出代码,否则需要$?

BSD系统在<sysexits.h>中有几十个(单字节)常规退出码(但是Linux 通常不遵循这些约定)。

在Unix系统上,从程序"返回"整数i的好方法是输出它(以文本形式,即使用printf("%dn", i);…)到stdout。调用程序(shell或其他程序)可以读取它。在C程序中很容易使用popen(3)(与pclose一起),或者更一般地学习pipe(7)-s

我个人的梦想是让程序返回一些字符串作为它们的退出值,但这不会很快发生,需要在操作系统和编译器和语言中进行更改....

main返回的值实际上只是一个无符号字节。高位用于其他事情(特殊状态标志)。

至少在UNIX和类UNIX系统(如Mac OSX和Linux)上是这样。参见wait系统调用的官方POSIX参考。