使用g ++以及與-Waggregate-return
試圖沉默-Waggregate - 只返回一個宏的g ++ - 越野車編譯器?
#define DOCTEST_CHECK(expr) \
do { \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Waggregate-return\"");\
if(Result failed = (ExpressionDecomposer() << expr)) \
printf("%s\n", failed.m_decomposition.c_str()); \
_Pragma("GCC diagnostic pop"); \
} while(false)
DOCTEST_CHECK(true == false); // produces warnings
但用手版本展開不產生任何警告編譯:
do {
_Pragma("GCC diagnostic push");
_Pragma("GCC diagnostic ignored \"-Waggregate-return\"");
if(Result failed = (ExpressionDecomposer() << true == false))
printf("%s\n", failed.m_decomposition.c_str());
_Pragma("GCC diagnostic pop");
} while(false);
不應該的行爲是一樣的嗎?
我不認爲Result
和ExpressionDecomposer
類型很重要 - 只是類。
我試圖讓表達式分解的工作像here(事情已經重新命名了一下)。
編輯: >>here < <是使用以免庫
我的問題是對問題的現場演示:爲什麼呢?我如何在第一種情況下使用宏免費警告?我無法承擔全球範圍內的警告。
我知道這並不回答這個問題,但'-Waggregate-return'似乎相當迂腐,應該被忽略,特別是在C++中,通過值返回是完全正常的。你可以看看[這個問題](http://stackoverflow.com/questions/14016993/confusion-in-regards-to-purpose-behavior-of-waggregate-return)。 –
我依稀記得GCC在宏中有編譯指示問題;你可能想要搜索他們的bugzilla。 –
@AlexandreC。我永遠不會使用這個警告的個人代碼,但我正在寫的圖書館應該是完全警告,即使在最激進的水平(我受到完美主義)...此外這種警告是不是''' - 牆上' ''或'''-Wextra'''很有道理... – onqtam