Почему компиляторы ANSI C не помечают использование строкового литерального аргумента в вызове функции, в котором соответствующий параметр не имеет спецификатора const? Например, следующий код может сгенерировать исключение при попытке записи в постоянную память.
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, похоже, этого не делают. Вызов somefunc с аргументом const char * вызовет предупреждение компилятора.