预处理器宏调用内联函数

时间:2017-01-27 10:18:46

标签: c++

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

#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;
}

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

2 个答案:

答案 0 :(得分:3)

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

inline double in_bar(double x) {
    return x + 2;
}

int main() {
    std::cout << in_bar(2) << std::endl;
}

答案 1 :(得分:1)

你原来的宏被破坏了,使用一个函数会纠正它。

E.g。如果有人写了bar(1<<2)*4,它会生成1&lt;&lt;&lt;&lt;&lt; 2 + 2 * 4,这不是你所期望的。

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

BTW:正确的宏将是

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