【发布时间】:2017-02-24 15:48:10
【问题描述】:
用 C 语言表达“这个函数总是会返回一个常量值”的语义有什么好的方法?
我正在考虑读取只读寄存器并可能对其进行移位和/或掩码的内联汇编函数。显然,在运行期间,函数的返回值不会改变;因此编译器可能会一直避免内联或调用函数,而是旨在重用给定范围内第一次调用的值。
const int that_const_value()
{
return (ro_register >> 16) & 0xff;
}
我可以存储价值并重复使用它。但是可能会间接调用此函数,例如通过其他宏扩展。
#define that_bit() that_const_value() & 0x1
#define other_bit() that_const_value() & 0x2
...
if (that_bit()) {
...
}
...
if (other_bit()) {
...
}
将原始函数定义为 const 似乎并没有削减它,或者至少在我尝试的示例中。
【问题讨论】:
-
要么内联你的函数,要么定义一个宏来代替
#define that_const_value() ((ro_register >> 16) & 0xff) -
因为宏只是文本替换,您所需要的就是这些。一个宏,将允许你想要的语法和你真正想要的结果。
-
GCC 对此有
__attribute__((__pure__))。 -
@melpomene 是否可以/是否应该将它用于第一次调用它时进行一些计算的函数,然后将结果存储在某个静态中以在每次连续调用时返回它?编辑:我认为
pure不是正确的做法...... -
@EugeneSh。见stackoverflow.com/questions/29117836/…