So um das mal klar zu Stellen. Ab C99 ist geregelt, dass
|
C-/C++-Quelltext
|
1
2
3
4
|
int size = 0;
printf("Enter size of array: ");
scanf(%d, &size);
char data[size];
|
gültiges
C ist. Nun ist C++ aber nicht wie viele denken ein 1 : 1 abklatsch von C mit OOP drin, sondern es ist etwas anders. Außerdem ist C++ eher auf C98 zurück zu führen. Demnach ist obiger Code kein Standard C++ Code. z.B. std::vector könnte für das Problem genutzt werden, wobei dort ja auch die Größe nachträglich verändert werden kann usw. (demnach einiges drin ist, was ein normaler Array nicht bietet).
Es gibt allerdings Compiler, die
|
C-/C++-Quelltext
|
1
2
3
4
5
|
std::size_t size(0);
std::cout << "Enter size of array: ";
while (!(std::cin >> size)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
char data[size];
|
erlauben. Ein Beispiel dafür ist der G++, mit dem viele arbeiten. mit pedantic flag, erlaubt aber auch dieser es nicht, weil es eben kein Standard ist, sondern eine Compiler eigene Erweiterung. Davon gibt es auch in anderen Compilern welche. z.B. beim VC++.