`return 0x1;`是什么意思?

问题描述 投票:11回答:10

在网上浏览项目的来源时,我发现主要的一些return语句对我来说很奇怪:

int main()
{
    /* ... */
    return 0x1;
}

所以主要是返回0x1 radix 16,但那是1 radix 10!不应该主要回归0

那是不对的,对吗?顺便问一下return 0x0好吗?

c return-value hex return
10个回答
19
投票

它返回1. 0x1只是十六进制值1。

您也可以自由返回0x0。它只是0的不同表示。如果你喜欢,你也可以使用八进制:)


1
投票

你真的明白基数是什么意思吗?

Base-n数字使用0n-1的n位数。 (AbAb-1 ... A1A0)n = Ab * nb + Ab-1 * nb-1 + ... A1 * n1 + A0 * n0

所以1是一个有效的十六进制字符,0x1表示1x160,它固有地等于1


4
投票

0x1或1没有区别。这是相同的数字。因此,您也可以返回0x0 - 这只是在代码中写入0的另一种方式。

但是,假设返回是主块中的最后一行代码,那么它应该不会返回1是正确的:来自main的非零返回代码表示失败,如果程序运行到最后,那通常是成功的标志 - 所以你应该在这种情况下返回0。

但是,完全可以以相反的方式构建程序,因此返回1在这里也是正确的。


3
投票

简单地说,转换为:

return 1;

通过在数字前加上“0x”,您可以在源代码中输入十六进制数字,例如0xFF = 255

您的主函数可以返回您想要的任何值,这样您就可以有效地记录可能(或可能不)发生的任何错误情况。如果该程序由询问返回值的进程调用,那么如果将返回值更改为0x0(或仅为0),则调用程序可能会意外地更改其行为。


2
投票

是的,0x1(十六进制1)与1(十进制1)相同。所以,上面相当于普通的return 1

main不需要返回0. main“应该”返回其作者想要返回的任何内容。他们想返回1 - 他们返回1.他们想使用十六进制表示法 - 他们使用十六进制表示法。

有人只是觉得这样做。没有其他解释。


2
投票

0x1只是另一种写1的方式!文字1在十进制或十六进制中是相同的。但它并非总是如此,例如decimal 10不等于hexadecimal 10

在此示例中,main()返回1.传统上,除0之外的任何返回值都被视为不成功完成。


1
投票

main()的返回值作为可执行文件的返回值/错误代码传递给外部调用者,例如ERRORLEVEL$?


1
投票

这意味着:返回1

您可以使用十六进制格式的数字,如此0x ...


1
投票

对于1,0x1只是十六进制。编译后没有区别。 0x0将等效为0。

主函数的返回值通常不被系统使用。但是如果程序被其他程序(例如安装程序)调用,它们可能会被它们检查。如果一切正常则返回0,而其他东西则表示错误。


1
投票

我觉得这个信息对你有帮助吗? 结果根据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将第二种情况视为不同(不是所有数字)表达式或变量..等等

© www.soinside.com 2019 - 2024. All rights reserved.