预处理器宏调用内联函数

Preprocessor macro calling inline function

本文关键字:函数 调用 处理器 预处理      更新时间:2023-10-16

在我的代码中,我使用了预处理器宏

#define BAR(x) x+2

但后来我意识到我需要一个内联函数来代替它,并最终得到了以下代码

#define BAR(x) in_bar(x)
inline double in_bar(double x) {
  return x + 2;
}
void main() {
  std::cout << BAR(2) << std::endl;
}

有效吗?它似乎有效,但不会导致任何潜在的问题吗?

它是有效的,但没有必要。而是直接从 main 调用内联函数。此外,main应该返回int

inline double in_bar(double x) {
    return x + 2;
}
int main() {
    std::cout << in_bar(2) << std::endl;
}

您的原始宏已损坏,使用函数将纠正此问题。

例如,如果有人写bar(1<<2)*4它会生成 1<<2+2*4,这不是你所期望的。

如果你的某些代码依赖于这种破坏行为,结果会有所不同(但在大多数情况下,函数变体会更好)。正如其他人所建议的那样 - 只需将 BAR 设置为内联函数,而无需任何宏。

顺便说一句:正确的宏是

#define BAR(x) ((x)+2)