使用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