在网上浏览项目的来源时,我发现主要的一些return
语句对我来说很奇怪:
int main()
{
/* ... */
return 0x1;
}
所以主要是返回0x1 radix 16
,但那是1 radix 10
!不应该主要回归0
?
那是不对的,对吗?顺便问一下return 0x0
好吗?
它返回1. 0x1
只是十六进制值1。
您也可以自由返回0x0。它只是0的不同表示。如果你喜欢,你也可以使用八进制:)
你真的明白基数是什么意思吗?
Base-n数字使用0
到n-1
的n位数。 (AbAb-1 ... A1A0)n = Ab * nb + Ab-1 * nb-1 + ... A1 * n1 + A0 * n0
所以1是一个有效的十六进制字符,0x1
表示1x160,它固有地等于1
0x1或1没有区别。这是相同的数字。因此,您也可以返回0x0 - 这只是在代码中写入0的另一种方式。
但是,假设返回是主块中的最后一行代码,那么它应该不会返回1是正确的:来自main
的非零返回代码表示失败,如果程序运行到最后,那通常是成功的标志 - 所以你应该在这种情况下返回0。
但是,完全可以以相反的方式构建程序,因此返回1在这里也是正确的。
简单地说,转换为:
return 1;
通过在数字前加上“0x”,您可以在源代码中输入十六进制数字,例如0xFF = 255
您的主函数可以返回您想要的任何值,这样您就可以有效地记录可能(或可能不)发生的任何错误情况。如果该程序由询问返回值的进程调用,那么如果将返回值更改为0x0(或仅为0),则调用程序可能会意外地更改其行为。
是的,0x1
(十六进制1)与1
(十进制1)相同。所以,上面相当于普通的return 1
。
main
不需要返回0. main
“应该”返回其作者想要返回的任何内容。他们想返回1 - 他们返回1.他们想使用十六进制表示法 - 他们使用十六进制表示法。
有人只是觉得这样做。没有其他解释。
0x1
只是另一种写1
的方式!文字1
在十进制或十六进制中是相同的。但它并非总是如此,例如decimal 10
不等于hexadecimal 10
。
在此示例中,main()
返回1.传统上,除0之外的任何返回值都被视为不成功完成。
main()
的返回值作为可执行文件的返回值/错误代码传递给外部调用者,例如ERRORLEVEL
或$?
。
这意味着:返回1
您可以使用十六进制格式的数字,如此0x ...
对于1,0x1只是十六进制。编译后没有区别。 0x0将等效为0。
主函数的返回值通常不被系统使用。但是如果程序被其他程序(例如安装程序)调用,它们可能会被它们检查。如果一切正常则返回0,而其他东西则表示错误。
我觉得这个信息对你有帮助吗? 结果根据http://codepad.org/
1) int main() { return 0x0; }
Output: No errors or program output.
2) int main() { return 1x2; } //anythingxanything results below error
error: invalid suffix "x2" on integer constant
3) int main() { return 0x2; } //0xanything results :exit failure except for 0
Exited: ExitFailure 1
根据http://www.comeaucomputing.com/tryitout/的结果
except 2nd case it is compilng correctly(succeeded)
结果依据
GCC[g++] --- error return 1x0; except 2nd case all correct
EDG_compiler --- error return 1x0; except 2nd case all correct
Sun compiler --- error return 1x0; except 2nd case all correct
通过查看此结果..IT将第一和第三种情况视为十六进制.ANd将第二种情况视为不同(不是所有数字)表达式或变量..等等