c++ - 未限定范围的多行 MACROS 的危险

标签 c++ multiline visual-studio-macros

有没有办法保护这个 MACRO 免受无作用域的 if/for 语句的影响?

#define FOO(X, Y, ...) X->bar(_##Y->thatVar, __VA_ARGS__);\
post_op(X, Y)

bar 和 post_op 的顺序很重要,应用程序可以忽略 post_op 的结果

if(true)
    auto z = FOO(a,b);
else //compile error
    abort();

最佳答案

只需使用 lambda 将您的语句重新聚合回表达式。随心所欲地在任何可能出现表情的地方使用它。即使在 if 中没有大括号的表达式语句中也是如此。

#define FOO(X, Y, ...) [&] { \ 
  auto ret = X->bar(_##Y->thatVar, __VA_ARGS__);\
  post_op(X, Y); \
  return ret; }()

关于c++ - 未限定范围的多行 MACROS 的危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56337380/

相关文章:

visual-studio-2010 - 启动对话框时,Visual Studio 2010宏挂起

excel - 在 Excel VBA 中将整数与货币相乘

c++ - C++ 程序中的暂停控制台

c++ - 为什么 __builtin_parity 是相反的?

c++ - 使用 ICU 定义正则表达式负向后视的界限

html - HTML 中的多行按钮

sed多行替换问题

使用 std::unique_ptr 的 C++ Pimpl Idiom 不完整类型

正则表达式 - 匹配不以字符结尾的多行

visual-studio - 很棒的 Visual Studio 宏