为什么在终止时给出错误代码(非零)?

时间:2018-09-11 13:52:41

标签: c return-value main

此代码运行,甚至产生预期的输出。但是,在构建日志中,我总是得到Process terminated with status 2 (0 minute(s), 5 second(s))或此日志的某些变体。

代码-

#include<stdio.h>
#include<conio.h>

void main() {

printf("Please enter a character");
char ch = getch();

ch++;
printf("\n%c", ch);


} 

样本输出(输入为'a',不带引号)-

Please enter a character
b

4 个答案:

答案 0 :(得分:1)

如果您将main声明为int main(void)int main(int argc, char *argv[]),则当前的C标准表示到达终止于}的{​​{1}}时返回值为0如果main声明的返回类型与main兼容,但使用C实现定义的参数,则这也适用。

如果您像int那样声明main,则C标准不会说明行为是什么,这取决于您的C实现。

答案 1 :(得分:1)

首先,我建议检查What are the valid signatures for C's main() function?

对于托管环境,void不是main()的有效返回类型。

也就是说,根据此函数签名,返回类型为void,这表明对main()的调用未向调用方(环境)返回任何内容。现在,从环境中,尝试访问返回的值(即充其量的提示)最多是不确定的。 C标准没有为此定义任何行为。

答案 2 :(得分:1)

由于您声明的main没有有效的签名(即您给了它返回类型void),因此您无法假设任何有关实际返回给操作系统的值的信息。如果您要针对x86架构进行编译,则以下是可能发生的事情,以解释2的返回值:

main:
    ...
    call printf
    add esp, 8
    ; return value from printf is in EAX register
    ret 

printf返回写入标准输出的字符数,在您的情况下为2,格式为字符串\n%c。从printf退出时,EAX的返回值仍在指定用于保存返回值(main)的寄存器中,因此main才返回。

答案 3 :(得分:0)

如果您没有从main返回任何内容,则可能会返回任何值。对于您而言,您的程序将返回2,如消息(status 2)所示。您需要返回0来通知其他程序您的程序成功运行。

int main() {
   ....
   return 0;
}