gpt4 book ai didi

c - 是否可以将一段代码作为宏参数传递?

转载 作者:太空狗 更新时间:2023-10-29 15:24:38 25 4
gpt4 key购买 nike

我想用一些样板代码包装一些代码行,所以我应该像这样通过将多行代码作为宏参数传递来实现:

#define safeRun(x) if (ValidationOK()) {x} 

int main(int argc, char **argv) {
safeRun(
foo();
bar();
)
}

非常感谢。

最佳答案

如所写,您的代码将与逗号运算符发生冲突(但不是如前所述,函数参数列表中的逗号)。

假设您使用 C99,您甚至可以通过宏中的可变参数来避免这个问题:

#define safeRun(...) if (ValidationOK()) {__VA_ARGS__}

int main(int argc, char **argv) {
safeRun(
foo(a, b),
bar(c, d);
)
}

现在,就预处理器而言,宏有 2 个参数,用逗号分隔,但它们会按照您的需要进行处理。这是 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);}



}

您提出的建议是否是个好主意是一个单独的讨论;这些机制或多或少会使其发挥作用。

关于c - 是否可以将一段代码作为宏参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com