我想用一些样板代码包装一些代码行,所以我应该通过将多行代码作为宏参数传递来执行它,如下所示:
#define safeRun(x) if (ValidationOK()) {x}
int main(int argc, char **argv) {
safeRun(
foo();
bar();
)
}
Run Code Online (Sandbox Code Playgroud)
非常感谢.
如上所述,您的代码将运行逗号运算符(但不像之前声称的那样,在函数参数列表中使用逗号).
假设您使用C99,您甚至可以避免宏中的变量参数的问题:
#define safeRun(...) if (ValidationOK()) {__VA_ARGS__}
int main(int argc, char **argv) {
safeRun(
foo(a, b),
bar(c, d);
)
}
Run Code Online (Sandbox Code Playgroud)
现在,就预处理器而言,宏有两个参数,用逗号分隔,但它们可以根据需要进行处理.这是gcc -E输出:
# 1 "x3.c"
# 1 "<command-line>"
# 1 "x3.c"
int main(int argc, char **argv) {
if (ValidationOK()) {foo(a, b), bar(c, d);}
}
Run Code Online (Sandbox Code Playgroud)
你提议的是一个好主意是一个单独的讨论; 这些机制或多或少会使其发挥作用.
| 归档时间: |
|
| 查看次数: |
2844 次 |
| 最近记录: |