Seite 1 von 1

C++ #Präprozessoranweisung

Verfasst: Mo Feb 15, 2016 7:13 pm
von PietCN
Guten Abend,
die Frage bezieht sich auf die Präprozessoranweisungen, welche verhindern sollen, dass mehrmals Headerdateien mit eingebunden werden.
Speziell geht es dabei um den C++ Compiler von Visual Studio 2013 / 2015, da ich nicht weiß ob die nachfolgenden Anweisungen Compiler spezifisch sind.

Und zwar wäre, wie ich es gelernt hatte, folgende Struktur dafür von Nöten:

Code: Alles auswählen

#ifndef __BEISPIELHEADER_HPP
#define __BEISPIELHEADER_HPP

... code ...

#endif
Nun habe ich aber folgendes gefunden:

Code: Alles auswählen

#pragma once
Demnach soll die Datei nur ein einziges mal mit eingebunden werden, was auch so wie ich es getestet hab ganz gut funktioniert.

Ist es nun ratsam die "Kurzform" zu verwenden oder sollte man bei der alten Methode bleiben?
Beziehungsweise ist es wie gehopst oder gesprungen und man sollte seinen persönlichen Vorlieben Vorzug geben?

Re: C++ #Präprozessoranweisung

Verfasst: Mo Feb 15, 2016 11:46 pm
von Xin
#pragma ist eine Anweisung, die jeder Compiler nach belieben implementieren darf. Es ist quasi die standardisierte Anweisung, etwas nicht standardisiertes zu tun.
#pragma once ist so eine nicht standardisierte Anweisung, die es nur bei Visual C++ gibt.

Wenn Du also portablen Code schreiben möchtest, rate ich von '#pragma once' ab, auch wenn es grundsätzlich eigentlich recht #pragmatisch ist.

Re: C++ #Präprozessoranweisung

Verfasst: Di Feb 16, 2016 11:37 am
von nufan
Xin hat geschrieben:#pragma once ist so eine nicht standardisierte Anweisung, die es nur bei Visual C++ gibt.
Scheint inzwischen von allen wichtigen Compilern unterstützt zu werden:
https://en.wikipedia.org/wiki/Pragma_once#Portability
Soll jetzt nicht heißen, dass ich es empfehle ^^ Beide Methoden haben ihre Vor- und Nachteile.

Re: C++ #Präprozessoranweisung

Verfasst: Di Feb 16, 2016 2:41 pm
von PietCN
Okay, dann bin ich schon wieder etwas geistreicher geworden.

Es gibt leider viele Probleme in der Programmierung die vielfältig gelöst werden können, aber es gibt nun mal etwas mehr qualitativere Ansätze und die eher nicht so qualitativ sind.

Die beiden Wege beim lernen zu differenzieren ist nicht immer so leicht.