【发布时间】:2024-01-18 13:46:01
【问题描述】:
我理解为什么 sizeof 没有实现为 Why is sizeof considered as an operator? 的函数的原因
但我不明白为什么我们需要将 sizeof 实现为 unary operator 的特殊类型,它作为编译时而不是运行时执行(我猜因为其他运算符总是作为运行时执行)
我们可以通过将 sizeof 设为宏不是来实现相同的目标吗?这样的compiled time unary operator和macros有什么区别?
我只是想知道为什么他们没有首先考虑宏,而是实施不同的运算符。当我第一次想到 sizeof() 是什么时,我认为它应该是宏。从来没有想过这样的一元运算符。
【问题讨论】:
-
你谷歌了!
compile time unary operator and macros和有什么区别? -
“我们可以通过将 sizeof 设为宏来实现相同的目标” - 不,你不能。 此外,C99 支持 VLA,并且评估了
sizeof一个 VLA在运行时。 -
作为一般规则,如果某些东西可以在编译时进行评估,它应该是。人们希望编译器做尽可能多的工作,从而减少运行时负担。
-
“其他运算符总是作为运行时执行”?真的吗?这根本不是真的。像
2 + 3 * 8这样的常量表达式需要在编译时进行评估。 -
@Mr.32 你为什么固执地坚持你的想法,它应该是一个宏?为什么应该会这样?事实上,它不应该,。首先,宏在许多方面不如运算符。它们不是类型安全的(事实上,它们根本不安全),它们令人困惑,它们会导致混乱。其次,数据类型的大小是编程语言中的一个内在概念,与其语义紧密耦合。因此,预处理器只是一个语法、纯文本工具,不能、不需要也不应该知道任何关于对象大小的事情。
标签: c macros sizeof unary-operator