main函数返回不会返回高整数

时间:2014-07-21 18:22:50

标签: c++ return

我有这个作为我的程序,我想打电话给那个程序:

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

我用另一个程序调用该程序并给它一个int参数。 当x为低时它很好但是假设x = 1000然后它返回一个低数字

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

至少在UNIX和类UNIX系统(如Mac OSX和Linux)上。参见例如official POSIX reference for the wait system call

答案 2 :(得分:2)

在Posix和Unix系统上,main的返回值大多为0(即EXIT_SUCCESS)与非零(例如EXIT_FAILURE即1) - 并且正如其他人所解释的那样低字节很重要。这是每个shell可以非常容易地处理的内容(例如,使用if或其&&);在shell中获取退出代码,否则需要$?

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

在Unix系统上,从程序中“返回”整数i的好方法是输出它(以文本形式,即printf("%d\n", i); ...)到 stdout 。调用程序(shell或其他东西)可以读取它。在C程序中,使用popen(3)(使用pclose)或更多通常了解pipe(7) - s

非常容易

我个人的梦想是让程序返回一些 string 作为退出值,但这不会很快发生,需要更改操作系统,编译器和语言...... / SUP>