簡體   English   中英

C ++預處理程序宏和Return語句

[英]C++ Preprocessor Macros and Return Statement

我想為我的方法聲明一個C ++預處理器宏

#define RETURN( expr... )

如果表達式不為空,則RETURN將返回表達式( return expr;return;如果返回類型為void,則僅調用return( return; )而不返回任何內容。

例如我試圖做

#define RETURN( expr... ) if ( expr ) { return expr } 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};
}

在某種會產生大量樣板代碼的宏工廠之外,我看不到有什么實際用途。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM