相关疑难解决方法(0)

"const LPVOID"是否等同于"void*const"?

如果是这样,为什么一些Win32标头使用它?

例如:

BOOL APIENTRY VerQueryValueA( const LPVOID pBlock,
    LPSTR lpSubBlock,
    LPVOID * lplpBuffer,
    PUINT puLen
    );
Run Code Online (Sandbox Code Playgroud)

多一点的阐述:如果API从不使用引用(或任何其他C++ -只建),但只有指针和价值观,什么是具有点const LPVOIDLPCVOID.

我应该把每个地方都const LPVOID视为真正含义的地方LPCVOID吗?(因此添加演员是安全的)

进一步澄清:const LPVOID pBlock在这种情况下,这似乎确实是一个错误.Windows 2008的SDK它替换到LPCVOIDVerQueryValue签名.很久以前,葡萄酒就这么做了.

c++ winapi typedef const-correctness

10
推荐指数
1
解决办法
3946
查看次数

static const函数指针C.

我的问题非常接近这个问题: 你如何声明一个const数组的函数指针?

我成功地在我的包含文件中创建了静态const函数指针数组.

void fun1( void* );
void fun2( void* );
typedef void ( *funPointer )( void* );
funPointer myFunPointer[2] = { &fun1, &fun2 };
Run Code Online (Sandbox Code Playgroud)

现在我发现了以下内容:我的编译器(gcc 4.6.3)抱怨我

(1)编译包含此头文件的不同*.o文件,然后将它们链接在一起(多重定义) - 它有助于在数组的声明中使用static关键字(编辑:实际上函数必须声明为static).

(2)编译包含头部的文件,而不是设置数组const.(myFunPointer声明但未使用)

static const myFunPointer[2] ....
Run Code Online (Sandbox Code Playgroud)

抓住错误/警告.

现在的问题是:我可以解释前一种行为,因为静态使用"预定义"的内存地址,并且函数的几个声明将在地址处合并.这个解释是否正确?如何解释const声明警告的缺失?这是编译器自动删除文件不必要部分的能力吗?

c arrays function-pointers

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

标签 统计

arrays ×1

c ×1

c++ ×1

const-correctness ×1

function-pointers ×1

typedef ×1

winapi ×1