我有这个作为我的程序,我想打电话给那个程序:
int main(int argc,char *argv[]) {
int x = atoi(argv[1]);
return x;
}
我用另一个程序调用该程序并给它一个int参数。 当x为低时它很好但是假设x = 1000然后它返回一个低数字
答案 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>