为什么ANSI C编译器在函数调用中不标记字符串文字参数的使用,其中相应的参数没有const限定符?例如,以下代码可能会通过尝试写入只读内存来生成异常。C中的字符串常量与常量字符*
void somefunc(char buffer[10]);
void somefunc(char buffer[10]) {
int i;
for (i = 0; i < 10; i++)
buffer[i] = 0;
}
int main(int argc, char **argv) {
somefunc("Literal");
return 0;
}
这种情况可以在编译时识别,但VS2010和gcc似乎没有这样做。使用const char *参数调用somefunc将生成编译器警告。
好问题 - 即使使用'-Wextra',gcc也无法捕捉到这个问题。 – 2010-07-21 20:21:47
声明一个函数的意义是什么,然后定义它的下一行? :) – GManNickG 2010-07-21 20:27:54
汉斯:我已经修改了这个问题来指定ANSI C.无论如何,我并不是建议发布编译器错误。 3级或4级警告只会突出显示潜在的危险情况。 – Robin 2010-07-21 20:35:24