【问题标题】:Is the "(int)" in "sizeof (int)" a typecast operator or some special case parameter? [C] [duplicate]“sizeof (int)”中的“(int)”是类型转换运算符还是某些特殊情况参数? [C] [重复]
【发布时间】:2015-07-14 17:32:57
【问题描述】:

我一直认为 C 表达式 sizeof (int) 像函数一样工作,括号内的任何内容都像参数一样传递。由于int(或任何其他类型说明符)实际上是一个关键字而不是可以传递的对象,我认为它只是某种硬编码到编译器中的特殊情况。

但我最近发现,如果我在变量上使用 sizeof,我可以省略括号 (sizeof var),它会编译并运行良好。由于sizeof 实际上是一个运算符本身而不是一个函数(并且运算符不需要括号),并且类型说明符是唯一需要括号的东西,现在我想知道它们是否真的是类型说明符或者如果他们'实际上,sizeof 以某种方式使用类型转换运算符来查找相应类型的大小。

【问题讨论】:

  • 这就是为什么重复是有用的,由于措辞不同,它们可以帮助其他人找到正确的问题。
  • 与其“发现”事物,不如考虑阅读文档。
  • "不知何故被 sizeof 使用" -- sizeof 不是代理;编译器是。编译器当然知道或可以在编译时计算任何类型的大小(VLA 除外)。 sizeof (type) 只是 syntax,它告诉编译器此时需要该类型的大小。

标签: c casting sizeof


【解决方案1】:
如果操作数是数据类型

()sizeof 运算符一起使用。

C11:6.5.3.4(p2):

sizeof 运算符产生其操作数的大小(以字节为单位),可能是 表达式或类型的括号名称。大小由操作数的类型决定。

【讨论】:

  • 括号真的告诉编译器里面的东西是一个类型吗?表达式不能也放在括号中吗?
  • @FredLarson;嗯..有效点!编辑了答案。
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2021-04-27
  • 2012-05-10
相关资源
最近更新 更多