【问题标题】:Is (size_t)0 a good practice in C or not?(size_t)0 是否是 C 语言中的一个好习惯?
【发布时间】:2020-02-06 14:23:35
【问题描述】:

我在 C 代码中看到了以下内容,这对我来说似乎很奇怪:

myType GetStuff(size_t *iSize) {
    *iSize = (size_t)0;    
    size_t h = 0;       
    *iSize += h;
}

没有演员表也能正常工作:*iSize = 0;

是否需要 (size_t) 演员表还是多余的?

【问题讨论】:

  • 这很可能是对编译器警告的修复,如果不是 - 它冷被删除
  • 为什么*iSize = 0 会给出警告而不是h = 0,因为*iSizeh 属于同一类型...(换句话说:如果*iSize = 0 需要演员表, h = 0也应该有演员表)。
  • 你不应该那样改变问题,答案和cmets不会反映问题。
  • @anastaciu:我看过问题历史,我的评论是成立的。 明确陈述了预期的问题。答案应该集中在被问到的问题上。问题中有关代码其他方面的陈述应归入次要地位,例如补充说明。而且,正如我所写的,人们显示声明只是为了显示对象的类型而不是表示实际代码的情况并不少见。好与坏,这种情况并不少见,所以有经验的参与者应该认清它,而不是因为它而跳上海报。
  • 虽然我决定删掉一部分不再有意义的答案,但我必须认识到问题的重点没有改变。

标签: c casting coding-style


【解决方案1】:

是否需要 (size_t) 演员或多余的演员?

算术类型隐式转换。你不需要演员表。也就是说,强制转换提高了代码的可读性,并可能避免某些编译器发出一些警告。

【讨论】:

  • 如果只是演员阵容问题,那么明确是好的。允许从有符号到无符号的隐式转换是草率的。通常会将编译器和静态分析器设置为针对此类转换发出警告,因此强制转换是有意义的。
  • 我明白你的意思,从可读性的角度来看更容易检测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多