Hasty Briefsbeta

双语

Sizeof is surprisingly difficult to parse in C

8 hours ago
  • sizeof的操作数可以是单目表达式或带括号的类型名,表达式不需要括号。
  • 解析sizeof首先检查是否有左括号,尝试解析类型名;如果失败,则将其视为表达式。
  • 像sizeof(int){0}这样的复合字面量会使解析复杂化,因为它们可能在右花括号后包含后缀运算符。
  • 一种解决方案是通过在类型名后检查'{'标记,然后解析任何后续后缀运算符来处理复合字面量。
  • 另一种方法是编写一个函数,无需回溯即可解析单目表达式或带括号的类型名,但要小心sizeof(int)+1这样的表达式,避免将其解析为强制类型转换。
  • 这些原则也适用于C2y中新增的_Countof运算符。

相关文章

加载中…