C++ 预处理器宏和 Return 语句

C++ Preprocessor Macros and Return Statement

我想为我的方法声明一个 C++ 预处理器宏

#define RETURN( expr... )

如果表达式不为空,RETURN 将 return 表达式 (return expr;) 或者只调用 return (return;) return 类型无效。

比如我试过

#define RETURN( expr... ) if ( expr ) { return expr } return;

但是如果我把它放在我的程序中它期望非空 return 类型的地方,它会抱怨 return 语句没有价值,因为只有一个 return;在末尾。这样做的正确方法是什么?谢谢。

#define RETURN(...) return __VA_ARGS__

您不需要在这里使用可变参数宏,因为它们无论如何都会变成逗号运算符。事实证明,您确实想要使用可变参数宏!谢谢@chris,我从没想过要返回 {...}.

使用它看起来像:

void foo() {
    RETURN(); //return ;
}
int bar() {
    RETURN(0); //return 0;
}
float RunningOutOfFunctionNames() {
    RETURN(0, 'c', 2.0); //return 0, 'c', 2.0;
                           //AKA return 2.0;
}
std::pair<int, int> ThisOnlyWorksWithVariadicMacros() {
    RETURN({1, 2}); //return {1, 2};
}

除了生成大量样板代码的某种宏工厂之外,我看不到它的实际用途。