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

时间:2010-10-11 07:21:36

标签: c return-value hex return

在网上浏览项目的来源时,我在main中发现了一些看起来很奇怪的return语句:

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

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

这是不对的,对吗?顺便问一下,return 0x0可以吗?

11 个答案:

答案 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数字使用0n-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;
}