Wątek przeniesiony 2014-12-04 12:14 z C/C++ przez ŁF.

Zmienne zwykłe i const w inicjalizowaniu tablic

0

Witajcie

Mam z kumplem pewien problem:
On używa Eclipse i kompilatora g++ i poniższy kod mu działa:

int main()
{
int size = 3;
int tab[size];

return 0;
}

..natomiast poniższy kod nie działa:

int size = 3;
int tab[size];

int main()
{

return 0;
}

Co więcej, ja używam Microsoft Visual Studio 2013 i powyższe przykłady u mnie nie przechodzą.

Do każdego przypadku muszę dopisać modyfikator 'const', żeby zadziałało:

const int size = 3;
}

..W obu przypadkach - i w funkcji main i poza nią.

Czy mógłby ktoś wytłumaczyć krótko jak powinno być i dlaczego?

Dzięki ;)

poprawienie tagów wątku - @furious programming

1
int size = 3;
int tab[size]; 

takie cos w c++ jest zakazane (program sie nie skompiluje) po angielsku nazywa sie to Variable Length Array. mozna powiedziec ze jest to "inicjalizacja w locie".

Kompilator nie ma pewnosci ze ta zmienna nie zmieni sie miedzyczasie wiec wyrzuca blad (i bardzo dobrze). Jezeli zmienna jest const to kompilator ma zagwarantowane ze ta zmienna sie nie zmieni i mozna zainicjalizowac tak tablice

w C taka inicjalizacja jest to mozliwe i nie wyrzuca zadnych bledow (taki maly paradoks)

Ale, dosc o tej tablicy. Wazniejsze jest cos innego. Zapewne NIGDY nie bedziesz uzywac tablicy, zawsze bedziesz uzywac jakis kontererow (np vector) wiec zapoznaj sie z tym a nie walcz z tablicami ;)
http://www.parashift.com/c++-faq/arrays-are-evil.html

0

C++ doesn't allow non-constant values for the size of an array. That's just the way it was designed.
odpowiedź z, zacznijcie używać googla do tak prostych pytań chłopaki

http://stackoverflow.com/questions/9219712/c-array-expresssion-must-have-a-constant-value

1 użytkowników online, w tym zalogowanych: 0, gości: 1