Задание размерности массива неконстантой.
От: Dr.Offset  
Дата: 27.01.07 11:30
Оценка:
Мне в первую очередь интересны мнения.

Начнем с того, что я весьма уважаю компилятор с++ в 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 год...

У кого какие мнения на сей счет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.