Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

09.09.2008, 14:43

alloca is afaik genausowenig standard C++ wie variable length arrays.
afaik ist das ding meistens ein compiler intrinsic...
portabel isses auf jeden fall nicht. und einige C++ compiler unterstützen die C99 variable length arrays ohnehin...

12

09.09.2008, 15:23

Zitat

C-/C++-Quelltext

1
2
3
4
5
6
void main() 
{ 
  int size; 
  std::cin >> size; 
  int* array = alloca(size); 
} 


1. "void main()", was soll ich dazu sagen, als dass es so nicht sein sollte?
2. Wenn du es mit int* machst, dann könnte man doch auch "new" verwenden, oder?

C-/C++-Quelltext

1
2
3
4
int size;
int* array;
std::cin >> size;
array = new int[size];

Das würde doch funktionieren, oder?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

09.09.2008, 15:27

Zitat von »"defaultplayer^^

1. "void main()", was soll ich dazu sagen, als dass es so nicht sein sollte?


ja das stimmt, void main() ist kein standard c++.
aber is ja nicht so schlimm, vermutlich hat er beim runtertippen von dem einfachen beispiel da einfach keinen gedanken an sowas verschwendet ;)

Zitat von »"defaultplayer^^

2. Wenn du es mit int* machst, dann könnte man doch auch "new" verwenden, oder?


ja natürlich, das wäre aber etwas andres als alloca. alloca reserviert platz am stack und nicht am heap, wie new es tut. alloca ist sicherlich viel schneller als new.

Zitat von »"defaultplayer^^

Das würde doch funktionieren, oder?


ja, aber es würde was andres machen (siehe oben)...

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

14

09.09.2008, 17:34

Zitat von »"dot"«

Zitat von »"defaultplayer^^

1. "void main()", was soll ich dazu sagen, als dass es so nicht sein sollte?


ja das stimmt, void main() ist kein standard c++.
aber is ja nicht so schlimm, vermutlich hat er beim runtertippen von dem einfachen beispiel da einfach keinen gedanken an sowas verschwendet ;)

Zugegebenermaßen hab ichs extra so geschrieben:)
Nur um die zu nerven, die lieber nach Standard programmieren, als produktiv. Ja, ich bin gemein...


Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

09.09.2008, 17:46

Zitat von »"Helmut"«

Zitat von »"dot"«

Zitat von »"defaultplayer^^

1. "void main()", was soll ich dazu sagen, als dass es so nicht sein sollte?


ja das stimmt, void main() ist kein standard c++.
aber is ja nicht so schlimm, vermutlich hat er beim runtertippen von dem einfachen beispiel da einfach keinen gedanken an sowas verschwendet ;)

Zugegebenermaßen hab ichs extra so geschrieben:)


In C99 ist void main erlaubt! :)))
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

09.09.2008, 18:39

Zitat von »"David_pb"«

In C99 ist void main erlaubt! :)))


in C99 isses neuerdings erlaubt. es is aber weder definiert was es tut, noch ist garantiert dass ein standardkonformer compiler es annimmt.
und in C++ isses weiterhin verboten.

Zitat von »"Helmut"«

Zugegebenermaßen hab ichs extra so geschrieben:)
Nur um die zu nerven, die lieber nach Standard programmieren, als produktiv. Ja, ich bin gemein...


ich bin nicht der typ der auf solchen dingen herumreitet. ich wollt nur drauf hinweisen ;)
mir persönlich isses komplett egal ob du standardkonform programmierst oder nicht. ich denke nur man sollte drauf hinweisen wenn etwas nicht dem standard entspricht, da dann ja niemandem garantiert ist, dass der code mit einem standardkonformen compiler funktioniert.
nehmen wir z.b. zwei der populärsten compiler: dein code kompiliert vielleicht mit GCC, aber MSVC z.b. nimmt ihn schon nichtmehr an...

ich denke der sinn eines standard sollte jedem klar sein. was rauskommt wenn sich keiner dran hält kann sich jeder selbst ausmalen, wenn er in die verheulten augen eines webentwicklers blickt...

fakt ist, dass kein compiler dieser erde dieses programm kompilieren muss. wenn es doch einer tut kannst du, ohne in der doku deines systems/compilers nachzusehen, nicht sagen was dein programm machen wird (es könnte einfach funktionieren, könnte aber auch abstürzen oder ein paar lustige emails verschicken. niemand kann dir nur anhand des codes sicher sagen was dieses programm tun wird).
es gibt viele situationen in denen man sich auf implementation defined behaviour verlassen muss (vor allem wenn man sehr low level programmiert), und es gibt auch nichts dagegen einzuwenden. der standard kann nicht alles definieren und es bleibt einem letztendlich selbst überlassen ob man sich dran hält. ich nur seh nicht, in welcher hinsicht einem nachteile erwachsen, wenn man sich an den standard hält!? vor allem seh ich nicht wo man durch den C++ standard in seiner produktivität eingeschränkt wird. ich würde eher mal behaupten dass das gegenteil der fall ist, wenn mein programm dann zumindest teilweise einfach portierbar ist...

Werbeanzeige