Мне в первую очередь интересны мнения.
Начнем с того, что я весьма уважаю компилятор с++ в gcc и подобного (см. ниже) поведения от него я неожидал вовсе. Цель моего поста выяснить кто неправ. И если неправ я, то почему.
Есть такой код (скажу сразу, я бы в жизни не додумался написать такое, однако, есть добрые люди, посдказали
:
int main(int argc, char * argv[])
{
int arr[argc]; // что это мы тут такое творим!??
return 0;
}
Mingw v3.4.2, проглотил этот код без каких-либо предупреждений, даже при выставленной опции компиляции -Wall.
Он скомпилировал и такой код:
int main(int argc, char * argv[])
{
const int size = argc;
int a[size];
return 0;
}
Потом я стал экспериментировать и написал вот что:
int f(int a)
{
return a;
}
int main(int argc, char * argv[])
{
int size;
std::cin >> size;
const int b = f(size);
std::cout << b << std::endl; // b будет равно тому, что мы записали в size
int a[b];
return 0;
}
Может конечно в этом коде заключен какой-то скрытый смысл, коего я непонимаю. Но мне кажется, что это все неверно и компилироваться не должно. Это подтвердили тесты на других компиляторах и просмотр стандарта ISO/IEC 14882 за 98 год...
У кого какие мнения на сей счет?