C++ #Präprozessoranweisung

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
PietCN
Beiträge: 13
Registriert: Sa Jan 16, 2016 10:49 pm

C++ #Präprozessoranweisung

Beitrag von PietCN » Mo Feb 15, 2016 7:13 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ #Präprozessoranweisung

Beitrag von Xin » Mo Feb 15, 2016 11:46 pm

#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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C++ #Präprozessoranweisung

Beitrag von nufan » Di Feb 16, 2016 11:37 am

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.

PietCN
Beiträge: 13
Registriert: Sa Jan 16, 2016 10:49 pm

Re: C++ #Präprozessoranweisung

Beitrag von PietCN » Di Feb 16, 2016 2:41 pm

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.

Antworten