作为学校的作业,我们必须编写一个C ++程序,并在main
中返回不同的错误代码。
问题是如果发生特定错误我们必须返回-2
但我不知道如何返回负值。
例如:
int main()
{
int a = -2;
return a;
}
在Windows中,这给了我一个返回值,如:42232684
,在Linux中有:253
为什么不允许-2
?
我怎样才能获得-2
?
答案 0 :(得分:9)
问题是,返回给操作系统的内容随后由操作系统外壳解释为IT喜欢它,而不是程序喜欢的。
main函数返回一个int,而return -2
正是你的程序必须做的。
253是-2 in 2s补码到8位。
问题 - 这是C ++规范(int main()
)与shell使用它的方式不匹配。但它不依赖于该计划。
作业本身就是一个陷阱。
答案 1 :(得分:3)
来自C ++ 11标准18.5 / 8:
如果状态为零或EXIT_SUCCESS,则为 返回状态成功终止的实现定义形式。如果status为EXIT_FAILURE,则返回状态为不成功终止的实现定义形式。 否则返回的状态是实现定义的。
因此,它完全符合您对不同平台和/或编译器的不同结果。
答案 2 :(得分:2)
Unix和Linux仅限于8位返回码,-2是0xfe。当你echo $?
您需要提供0到255之间的返回码。
http://en.wikipedia.org/wiki/Exit_status
兼容POSIX的退出状态限制为0-255,即 无符号8位整数的范围。