在我的代码中,我使用了预处理器宏
#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;
}
有效吗?它似乎有效,但不会引起任何潜在的问题吗?
答案 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)