【发布时间】:2015-03-16 11:05:39
【问题描述】:
考虑这段代码:
#include <memory.h>
#include <stdlib.h>
void Foo()
{
const char ** caps = malloc( sizeof( char * ) );
memset( caps, 0, sizeof( char * ) );
}
使用 gcc 4.9.2 -pedantic 编译得很好,但带有默认选项的 cl 18(来自 VS2013 的那个)在 memset 行上显示 warning C4090: 'function' : different 'const' qualifiers。
现在caps 是一个指向 const char 的指针?所以指针本身不是 const 因此它应该毫无问题地转换为void*,我认为,但 cl 似乎会自动从中生成const void*,从而产生警告。这是对正在发生的事情的正确解释吗?这是非标准行为,对吧?
【问题讨论】:
-
我会说可能是一个 MS 编译器错误。虽然这样的代码让我毛骨悚然,但据我所知,它在技术上是完全合法的......
-
FWIW,迂腐模式下的 clang (3.4.1) 也认为你的代码没问题。
-
@mafso 不错,就是这个
标签: c pointers visual-c++ gcc