【发布时间】:2009-10-26 11:51:13
【问题描述】:
以下代码在 GCC 上编译时不会发出警告,但在 Visual Studio 2005 中会发出警告。
const void * x = 0;
char * const * p = x;
x 指向一个未知类型的常量对象,p 指向一个指向 char 的常量指针。为什么分配给 p 会导致警告?
同样,这是 C,而不是 C++。谢谢。
【问题讨论】:
-
可以添加警告信息吗?
-
同意 Etan:如果声明了警告信息,这个问题会更清楚。它是:警告 C4090: 'initializing' : different 'const' qualifiers
-
我的 VS2005(配置为 C++)在这种情况下实际上返回一个错误:'initializing' : cannot convert from 'const void ' to 'char *const *'。从“void”转换为指向非“void”的指针需要显式转换
-
将代码编译为 C 应该会给你 C4090 警告。
-
一些编译器即使在
void *转换中看到指针似乎具有不同的间接级别时也会发出警告。这可能是 MSVC++ 警告的原因。否则,这段代码没有问题。