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

11

28.01.2015, 13:30

Was ist der Unterschied zwischen #pragma once und den #defines ?
Unter Visual Studio werden ja glaub automatisch die #pragma once eingefügt. Ich entwickel grad unter NetBeans, der packt mir das automatisch in die #defines rein. Was ist da besser?

Umm ja die Klasse db::Forum ist nur dazu da, ne Tabelle aus der Datenbank 1:1 zu laden. Die Klasse web::forum enthält ne gewisse Logik und beantwortet die HTTP-Anfrage, die der Server reinkriegt. Deshalb hab ich dir getrennt.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

28.01.2015, 13:50

Korrigiert mich wenn ich Schwachsinn erzähle, aber #pragma once wurde ursprünglich von Microsoft eingeführt. Ob es mittlerweile zum Standard gehört, keine Ahnung. Zumindest "damals" war es so, dass #pragma once nicht unbedingt von jedem Compiler unterstützt wurde.
Der Vorteil von #pragma once ist, der Compiler kümmert sich darum dass die Datei nur ein mal Übersetzt/Eingebunden wird. Mit #define bastelt man sich so ein Verhalten ja selbst. Das Problem ist, hierbei kann es zu Namenskonflikten kommen. Dein Fall ist ein Beispiel dafür. Andererseits kann es auch passieren dass du eine Bibliothek nutzt und dort aus Versehen/Unwissen die selben Defines für deine Header benutzt. Zusätzlich kann es passieren dass sich Tippfehler einschleichen die du nicht bemerkst. Dadurch kann dann ungewolltes Verhalten entstehen was man erst mal wieder auf dieses Problem zurück führen muss.

C-/C++-Quelltext

1
2
3
4
5
6
#ifndef TESTITEST
#define TESTTIEST

// Klassendefinition

#endif


Hier hat sich zum Beispiel ein Buchstabendreher eingeschlichen. Gibt unzählige Tippfehler die teilweise gar nicht so schnell auffallen. In dem Beispiel hier würde es zu Fehlverhalten kommen da die Includeguards nicht wirken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

13

28.01.2015, 13:54

Genau, mittlerweile ist #pragma once aber ausreichend bekannt unter den Compilern, zumindest wird man wegen ifndef schon auf stackoverflow schief angeguckt. :D
War vor ein "paar" Tagen ja nicht so, da wurde es selten mal erwähnt aber schnell durch "not widely supported" im Keim erstickt.

MfG
Check

14

28.01.2015, 14:19

Das letzte mal als ich geguckt habe, wurde es von allen Compilern die mich jemals interessieren werden unterstützt. Seit dem benutze ich es nur noch; es ist nicht nur kürzer (schneller getippt, übersichtlicher), es ist auch sicherer (weil keine Tippfehler / Mehrfachdefinitionen passieren können).

Und sollte es irgendwann mal für irgendeinen Compilier nicht funktionieren, hat man die Include-Guards auch in 5 Minuten wieder eingebaut. Entweder von Hand oder per Skript, es ist jedenfalls nur ein minimaler Aufwand.
Lieber dumm fragen, als dumm bleiben!

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

15

28.01.2015, 15:39

Laut Wikipedia wird es von allen relevanten untestützt.
Ich glaube dann muss ich auch mal dazu wechseln.

Werbeanzeige