在Visual Studio中,断言被看作是C风格的投射。

问题描述 投票:0回答:1

这是错误和代码的一瞥。 我的一门课程要求我使用Warning Level 4,并在Visual Studio中把警告作为错误处理。除此之外,我们还需要激活Cpp Core Guidelines。然而,自从我激活了这些选项后,我就一直被警告错误C26493(不要使用C风格的casts)所困扰。显然,他们认为我的 "断言 "测试是C风格的casts。我没有看到任何其他学生有这个问题。谁能帮我解决这个问题?

c++ visual-studio warnings assert cpp-core-guidelines
1个回答
1
投票

Assert是一个宏,可以扩展(在visual studio中)到。


    #define assert(expression) (void)(                                                       \
            (!!(expression)) ||                                                              \
            (_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
        )

正如你所看到的,有一个C风格的情况下,以无效。


0
投票

所有学生都应该看到这个警告,而不仅仅是你。如果你想避免这个警告,使用一个使用C++风格的casts的ASSERT实现。

我一直在使用的任何标准ASSERT宏都会扩展到C风格的投向void,但是是gcc c++模式。https:/github.comlatteraglibcblobmasterassertassert.h。

这是我使用C++ casts自定义实现的一个例子。这也是在调试模式下使用一个全局变量,以便在调试时能够禁用断言。

extern MYUTILS_DLLINTERFACE bool g_MYASSERT_enabled;
extern bool MYUTILS_DLLINTERFACE _is_MYASSERT_enabled();
#ifdef _DEBUG
# define __MYASSERT(x) (static_cast<void>(!_is_MYASSERT_enabled() || (_ASSERTE(x), 0)))
#else
# define __MYASSERT(x) (static_cast<void>(0))
#endif
© www.soinside.com 2019 - 2024. All rights reserved.