【问题标题】:C functions that always return constant始终返回常量的 C 函数
【发布时间】: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 不是正确的做法......

标签: c constants


【解决方案1】:

我不能 100% 确定我正确理解了您的问题,但您是否正在寻找这样的解决方案:

#define that_const_value ((ro_register >> 16) &0xff)
#define that_bit         (that_const_value & 0x1)
#define other_bit        (that_const_value & 0x2)

这只会在编译时“替换”所有内容,因此您可以这样做:

if(that_bit)
{
    //Do That
}
if(other_bit)
{
    //Do Other
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 2019-02-27
    • 2011-10-19
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多