const правильность для параметра execv argv

Возможный дубликат:
const-correctness двойного указателя предупреждения в C

Посмотрите на таблицу здесь: http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html

Мы видим, что следующее недопустимо в C:

void f(const char * const argv[])
{
    (void)argv;
}

int main(int argc, char *argv[])
{
    (void)argc;
    f(argv);
    return 0;
}

test.c: In function 'main':
test.c:9: warning: passing argument 1 of 'f' from incompatible pointer type
test.c:1: note: expected 'const char * const*' but argument is of type 'char **'

Почему это недействительно? Мне кажется, что const char * const argv[] просто «более постоянна», чем char * argv [] (и это разрешено в C++), так почему же это недопустимо в C?


person Rodrigo Queiro    schedule 23.07.2012    source источник
comment
Вы читали этот ответ? stackoverflow.com/a/766406/1126268   -  person md5    schedule 23.07.2012
comment
@Kirilenko Я думаю, что все они отвечают на этот вопрос: parashift.com/c++- faq/constptrptr-conversion.html (char ** -> const char **), но мой вопрос касается (char ** -> const char **). Первый недействителен в C и C++, но последний, насколько я могу судить, недействителен только в C.   -  person Rodrigo Queiro    schedule 23.07.2012
comment
ecatmur: это его дубликат.   -  person Rodrigo Queiro    schedule 23.07.2012