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};
}
除了生成大量样板代码的某种宏工厂之外,我看不到它的实际用途。
我想为我的方法声明一个 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};
}
除了生成大量样板代码的某种宏工厂之外,我看不到它的实际用途。