LINUX.ORG.RU

Страуструп C++ ... ошибка или я чего не понимаю?


0

0

В этой книге на 128 - 129 старинице сказано что следующее недопустимо и является ошибкой:
void f(int i)
{
char[i];
}
однако как gcc так и icpc это успешно проглатывает! Я чего не понимаю? И если да то интересно чего?!

$ cat test.cxx
void f(int i) {
char[i];
}

int main() {
return 0;
}

$ g++ test.cxx
test.cxx: In function ‘void f(int)’:
test.cxx:2: error: expected unqualified-id before ‘[’ token

похоже ты делаешь что-то не то... что значит "успешно проглатывает"? Код тестового примера можно?

Spectr ★★★
()

У меня не компиляется.

i - это переменная, в момент компиляции её значение неизвестно, посему вот такие вот массивы делать нельзя

yoghurt ★★★★★
()

Массивы с динамической длиной придуманы в С99, а C++ базируется на C89. GCC это (и не только это) умеет, потому и молчит в тряпочку. Скажи ему -std=c++98 -Wall -Wextra - наверное, поругается.

const86 ★★★★★
()
Ответ на: комментарий от const86

> Скажи ему -std=c++98 -Wall -Wextra - наверное, поругается.

Зараза, не ругается. -pedantic ещё надо.

Это всё в предположении, что имелось в виду char x[i]; Просто char[i]; вообще никуда не годится, конечно же :)

const86 ★★★★★
()
Ответ на: комментарий от ahonymous

Гы, прикол. Таки да, работает :)

Как выше написали - это расширение, в текущем стандарте (без последних расширений) и книга Страуструпа права; и со старыми компиляторами собиратся такой код не будет.

А использовать это или нет в реальных прогах - тебе решать :)

Spectr ★★★
()
Ответ на: комментарий от Spectr

Народ ну естессно не void f(int i) { char[i]; }

а

void f(int i) { char с[i]; }

ОПЕЧАТАЛСЯ Я!

mskmsk1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.