Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 01.01.2008, 22:28 Titel: Arrays und nicht-konstante Ausdrücke |
|
|
Hi,
ich hatte neulich bei ein paar Freunden, die gerade anfangen C++ zu lernen, folgendes gesehen:
Code: | ...
int n;
std::cin >> n;
int array[n];
... |
Hat mich etwas gewundert, vorallem weil das funktioniert und der Compiler für sowas auch keine Warnung oder Fehler ausgegeben hat. Hatte ein wenig gegooglet, aber auch nur Fragen keine Antworten finden können. Weiß jemand warum das funktioniert?
Frohes neues Jahr!
Sören |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 01.01.2008, 23:01 Titel: |
|
|
Hi sören, schön mal wieder was von dir zu hören (ui das reimt sich )
Normalerweise darf kein C++ Compiler diesen Ausdruck durchgehen lassen, unter MSVC9 z.B. erhalte ich 3 Errors: Code: |
1>main.cpp(22) : error C2057: expected constant expression
1>main.cpp(22) : error C2466: cannot allocate an array of constant size 0
1>main.cpp(22) : error C2133: 'array' : unknown size |
Kann das vielleicht sein dass das nicht der Build war sondern ein vorheriger?
Gruß DXer |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 02.01.2008, 00:33 Titel: |
|
|
Bin mir aber ziemlich sicher dass es kein "toter Build" war.
Habs gerade auch nochmal explizit mit folgendem Programm ausprobiert:
Code: | #include <iostream>
void MyFunc(int n)
{
int Array[n];
for(int i=0; i<n; i++)
Array[i] = i*i;
for(int i=0; i<n; i++)
std::cout << Array[i] << std::endl;
}
int main (int argc, char * const argv[])
{
int num;
std::cin >> num;
MyFunc(num);
return 0;
}
|
Und wie gesagt: Es funktioniert tatsächlich. Habs erst unter XCode und dann mit Dev++ kompiliert und bei beiden nicht einmal Warnungen bekommen. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.01.2008, 12:01 Titel: |
|
|
hmm laut c++ standard dürfte das nicht gehen... (ich bekomme unter msvc9 dieselben Fehlermeldungen wie vorhin) Kann das sein dass du in den Compilereinstellungen etwas besonderes hast? Wie "auto dynamic array allocation" oder so?
Gruß DXer |
|
Nach oben |
|
|
Deviloper Junior JLI'ler
Anmeldedatum: 31.05.2006 Beiträge: 77
Medaillen: Keine
|
Verfasst am: 03.01.2008, 00:06 Titel: |
|
|
Hmm G++-Erweiterung. Hab DevC++ nicht, aber basiert dieser nicht auch auf G++ (GCC für C++ ) ?
Nutz aber dennoch std::vector odg. um auf allen Compilern die sich nach dem Standard richten gute Ergebnisse zu erhalten! |
|
Nach oben |
|
|
LordHoto JLI'ler
Alter: 35 Anmeldedatum: 27.03.2003 Beiträge: 137 Wohnort: Gelnhausen Medaillen: Keine
|
Verfasst am: 05.01.2008, 01:28 Titel: |
|
|
Hmm vllt. kein -pedantic switch? Ich denke g++ wird es auch bei C++ erlauben ohne diesen switch, da es in C99 erlaubt ist.
Jedenfalls sagt g++ mit -pedantic:
Code: |
error: ISO C++ forbids variable-size array ‘array’
|
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 08.01.2008, 00:32 Titel: |
|
|
Hatte die letzten Tage wenig Zeit wegen Uni. Werd mich morgen nochmal mit beschäftigen. Würde mal ganz gerne wissen woran's genau liegt. So gesehen ist es mMn eine Farce, dass der Compiler das ohne Warnung akzeptiert, weil so nicht dabei geholfen wird portablen Code zu schreiben. |
|
Nach oben |
|
|
LordHoto JLI'ler
Alter: 35 Anmeldedatum: 27.03.2003 Beiträge: 137 Wohnort: Gelnhausen Medaillen: Keine
|
Verfasst am: 11.01.2008, 00:12 Titel: |
|
|
Ahjo eigentlich jeder compiler schleppt so seine extensions mit, manche mit sprach features andere wiederum mit standard library extensions. |
|
Nach oben |
|
|
|