C / C++ / 奇思妙想 · 2024年 3月 12日 0

为什么预处理条件编译不能解析sizeof表达式?

169 次浏览

虽然sizeof表达式宣称是编译期常量,依然不能被条件编译处理,因为预处理根本无法解析稍微复杂的表达式,包括sizeof表达式。有人会说,既然sizeof都是常量,为何不让预处理也能使用呢?

  • 根源在于sizeof表达式并非很简单,可以是sizeof(int), 也可以是sizeof(a + 1.2), 预处理器被设计的比较简单,即使只加入简单的C语言类型sizeof处理,也没办法处理后者这种复杂的表达式,如果需要,也会让预处理器设计更复杂。总结就是:sizeof表达式可能涉及到复杂的类型推导和计算,无法在预处理阶段计算出结果。
  • PS: sizeof既是一个关键字,也是一个运算符。