此代码运行,甚至产生预期的输出。但是,在构建日志中,我总是得到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
答案 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;
}