【问题标题】:How sizeof Operators Works inside the IF Statement in C [duplicate]sizeof 运算符如何在 C 中的 IF 语句中工作 [重复]
【发布时间】:2017-05-21 13:48:22
【问题描述】:
int main()
{
     if (sizeof(int) > -1 )
           printf("True");
     else
           printf("False");
     return 0 ;
}

我预计程序会产生“真”,但执行后会产生“假”。谁能解释一下为什么会这样?

【问题讨论】:

  • 你发现sizeof operator 产生了什么?哪种类型?并正确格式化这个烂摊子。阅读How to Ask。现代编译器应该警告这种比较。如果没有,请启用所有推荐的警告(至少 -Wall -Wextra -Wconversion)。并始终在询问之前解决警告的原因。
  • 在 C 中,if 语句内的 sizeof 运算符的工作方式与 if 语句外的工作方式完全相同。

标签: c


【解决方案1】:

sizeof 返回 size_t,它是无符号的。

比较无符号数和有符号数在 C 中需要注意,因为这种比较通常会给初学者程序员带来令人惊讶的结果,正如我们在此处看到的那样。

基本上,-1 被转换为一个非常大的无符号整数,所以你的条件是假的。

【讨论】:

  • 结果并不“令人惊讶”,而是定义明确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
相关资源
最近更新 更多