相关疑难解决方法(0)

请问"variableName;" C++声明在任何时候都是无操作的?

在C++中,有时会定义一个变量,但不会使用.这是一个示例 - 与COM_INTERFACE_ENTRY_FUNC_BLINDATL宏一起使用的函数:

HRESULT WINAPI blindQuery( void* /*currentObject*/, REFIID iid, void** ppv, DWORD_PTR /*param*/ ) 
{
    DEBUG_LOG( __FUNCTION__ ); //DEBUG_LOG macro expands to an empty string in non-debug
    DEBUG_LOG( iid );
    iid; // <<<<<<<----silence compiler warning
    if( ppv == 0 ) {
        return E_POINTER;
    }
    *ppv = 0;
    return E_NOINTERFACE;
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,iid参数与DEBUG_LOG宏一起使用,在非调试配置中扩展为空字符串.因此,iid不能选择在签名中注释或删除变量名称.当编译非调试配置时,编译器会产生C4100: 'iid' : unreferenced formal parameter警告,因此为了使警告静音iid;,添加了被认为是无操作的语句.

问题如下:如果我们有以下任何声明:

 CSomeType variableName; //or
 CSomeType& variableName; //or
 CSomeType* variableName;
Run Code Online (Sandbox Code Playgroud)

将在C++代码中的以下语句:

variableName; …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-warnings

20
推荐指数
1
解决办法
2813
查看次数

自定义`assert`宏,支持逗号和错误消息

我想创建在中定义的assert宏的自定义版本,<cassert>在断言失败时显示错误消息。


所需用法:

custom_assert(AClass<T1, T2>::aBoolMethod(), "aBoolMethod must be true");


测试实现有缺陷:

#define custom_assert(mCondition, mMessage) ...
// This fails because mCondition may have commas in it

#define custom_assert(..., mMessage)
// Not sure about this either - mMessage may be an expression containing commas
// as well
Run Code Online (Sandbox Code Playgroud)

如何正确实现一个自定义断言,该自定义断言将布尔表达式(可能带有逗号)作为第一个参数,并将字符串表达式(可能带有逗号)作为第二个参数?

还是有一种不使用宏来实现断言的方法?

c++ macros assert c++11

5
推荐指数
1
解决办法
1968
查看次数

c ++ Google测试(gtest):如何创建自定义断言和期望?

我正在使用gtest为我的C ++程序创建单元测试。在我的测试中,我必须写很多这样的检查:

ASSERT_TRUE(myObject.IsValid());
EXPECT_EQ(myObject.GetSomeAttribute(), expectedValue);
Run Code Online (Sandbox Code Playgroud)

我必须写两个检查,因为如果我省略ASSERT_TRUEmyObject碰巧是无效的,则会myObject.GetSomeAttributre()导致调用崩溃。即使在测试中也不是很好。

我想要写的是这样的:

EXPECT_XXX_EQ(myObject.GetSomeAttribute(), expectedValue);
Run Code Online (Sandbox Code Playgroud)

这行代码应该与原始的两行大致相同(带有可选的奖励,如果myObject无效,将被报告,GetSomeAttribute()不会被调用,但是测试将继续运行)。

如何编写这样的自定义断言/期望?

c++ unit-testing googletest

3
推荐指数
1
解决办法
1950
查看次数