爲什麼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