在网上浏览项目的来源时,我在main中发现了一些看起来很奇怪的return
语句:
int main()
{
/* ... */
return 0x1;
}
所以主要是返回0x1 radix 16
,但那是1 radix 10
!主要不应该返回0
?
这是不对的,对吗?顺便问一下,return 0x0
可以吗?
答案 0 :(得分:19)
返回1. 0x1
只是十六进制值。
您也可以自由返回0x0。它只是0的不同表示。如果你愿意,也可以使用八进制:)
答案 1 :(得分:4)
0x1或1没有区别。这是相同的数字。因此,您也可以返回0x0 - 这只是在代码中写入0的另一种方式。
但是,假设返回是主块中的最后一行代码,那么它可能不会返回1:main
的非零返回代码表示失败,如果是程序运行到最后,这通常是成功的标志 - 所以你应该在这种情况下返回0。
但是,完全有可能以相反的方式构建程序,因此返回1也可能是正确的。
答案 2 :(得分:3)
简单地说,转换为:
return 1;
通过在数字前加上'0x',您可以在源代码中输入十六进制数字,例如0xFF = 255
您的主函数可以返回您想要的任何值,这样您就可以有效地记录可能(或可能不)发生的任何错误情况。如果该程序由询问返回值的进程调用,那么如果将返回值更改为0x0(或仅为0),则调用程序可能会意外地更改其行为。
答案 3 :(得分:2)
是的,0x1
(十六进制1)与1
(十进制1)相同。因此,上述内容相当于普通return 1
。
main
不需要返回0. main
“应该”返回作者想要返回的内容。他们想返回1 - 他们返回1.他们想使用十六进制表示法 - 他们使用十六进制表示法。
有人只是觉得这样做。没有其他解释。
答案 4 :(得分:2)
0x1
只是写1
的另一种方式!文字1
在十进制或十六进制中是相同的。但并非总是如此,例如decimal 10
不等于hexadecimal 10
。
在此示例中,main()
返回1.传统上,除0之外的任何返回值都被视为不成功完成。
答案 5 :(得分:1)
main()
的返回值作为可执行文件的返回值/错误代码传递给外部调用者,例如ERRORLEVEL
或$?
。
答案 6 :(得分:1)
这意味着:返回1
您可以使用十六进制格式的数字,例如0x ...
答案 7 :(得分:1)
0x1对于1只是十六进制。 编译后没有区别。 0x0将等效为0。
系统通常不使用main函数的返回值。 但是如果程序被其他程序(例如安装程序)调用,它们可能会被它们检查。 如果一切正常则返回0,而其他东西则表示错误。
答案 8 :(得分:1)
我认为这些信息对你有用吗? 根据{{3}}
的结果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://codepad.org/
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将第1和第3个案例视为十六进制.ANd将第2个案例视为不同(不是所有数字)的表达式或变量.etc
答案 9 :(得分:1)
你真的明白基数是什么意思吗?
Base-n数字使用0
到n-1
的n位数字。 (A <子> B'/子> A <子> B-1 子> ... A <子> 1 子> A <子> 0 子>)<子>名词子> = A b * n b + A b-1 * n b-1 + ... A 1 * n 1 + A 0 * n 0
因此1是有效的十六进制字符,0x1
表示1x16 0 ,其本质上等于1
答案 10 :(得分:0)
0x1 在 十六进制 中只是 1。
0x 表示数字采用 十六进制 形式。
如果您尝试以下代码,您可以获得相同的行为:
int main()
{
/* ... */
return 1;
}