c/c++语言开发共享是否可以将一段代码作为宏参数传递?

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

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

    现在,就预处理器而言,宏有两个参数,用逗号分隔,但它们可以根据需要进行处理。 这是gcc -E输出:

     # 1 "x3.c" # 1 "" # 1 "x3.c" int main(int argc, char **argv) { if (ValidationOK()) {foo(a, b), bar(c, d);} } 

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

    使用字符来“转义”宏定义中的换行符。 使用可变参数宏参数来支持包含代码行的参数内的逗号。 (此function是C99的一部分,但也存在于许多不合规的编译器中。)

     #define safeRun(...)  [Validation code];  if (ValidationOK())  {__VA_ARGS__}  [Finishing code];  /* bumper line to support last backslash, leave empty! */ 

    请注意,反斜杠和换行符之间不能有空格。

    标准警告:宏是封装的最漏洞forms; 如果可能,使用任何其他构造。

    由于多种原因,类似函数的宏非常糟糕。 解决这个问题的更好方法是使用实​​际function。

     start_safe(); foo(); bar(); stop_safe(); 

    正如@Potatoswatter所说,你可以使用反斜杠:

     #define safeRun(x)  [Validation code];  if (ValidationOK())  {x}  [Finishing code];  

    但如果您以这种方式使用它,这可能是一个问题:

     if (x) safeRun(y); else ... 

    要解决此问题:

     #define safeRun(x)  do {  [Validation code];  if (ValidationOK())  {x}  [Finishing code];  } while(0); 

      以上就是c/c++开发分享是否可以将一段代码作为宏参数传递?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541913.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐