Include-Guard
Der Include-Guard oder Include-Wächter ist eine Programmiertechnik, um in C und C++ das Problem der mehrfachen Einbindung zu lösen.
Dieses Problem tritt auf, wenn innerhalb einer Übersetzungseinheit mehrmals die gleiche Header-Datei eingebunden wird. Das geschieht in der Regel unbeabsichtigt, z. B. wenn mehrere Module die gleiche Bibliothek benutzen.
Beispiel einer Mehrfacheinbindung
Gegeben seien die folgenden beiden Header-Dateien A.h und B.h, die u. a. jeweils eine Klasse definieren:
<syntaxhighlight lang="cpp">
// A.h
const int M = 123;
class A { /* ... */ }; </syntaxhighlight>
<syntaxhighlight lang="cpp"> // B.h
- include "A.h"
class B : public A { /* ... */ }; </syntaxhighlight>
Im Hauptprogramm sollen nun sowohl die Klasse A als auch B genutzt werden:
<syntaxhighlight lang="cpp"> // program.cpp
- include "A.h"
- include "B.h"
int main() { /* ... */ } </syntaxhighlight>
Das Programm lässt sich nicht fehlerfrei kompilieren, weil die Klasse A doppelt definiert wird: Die erste Definition erfolgt beim Einbinden der Header-Datei A.h in Zeile 2. Die zweite Definition erfolgt, weil die Header-Datei B.h, die in Zeile 3 eingebunden wird, selbst wiederum A.h einbindet. Die Klasse (und ggf. weitere Variablen) aus dieser Datei wurden bereits zuvor definiert, was zu einem Fehler der Kompilierung führt.
Lösung mit Präprozessor-Makros (#ifndef)
Der #ifndef-Wrapper ist der traditionelle und C-konforme Ansatz. Das Problem der Mehrfacheinbindung wird durch Definition eines eindeutigen Präprozessor-Makros beim ersten Einbinden der Header-Datei gelöst. War das Makro bereits definiert, werden die nachfolgenden Definitionen des Headers übersprungen:
<syntaxhighlight lang="cpp"> // A.h
- ifndef A_H
- define A_H
class A { /* ... */ };
- endif /* A_H */
</syntaxhighlight>
Die obenstehenden Präprozessor-Befehle bewirken, dass beim erstmaligen Einbinden von A.h (aus program.cpp) das Makro A_H noch nicht definiert ist und der Präprozessor die Definitionen durchläuft. Beim zweiten Einbinden (aus B.h) ist das Makro bereits definiert und der Präprozessor überspringt den Block #ifndef … #endif.
Da Makros im globalen Namensraum existieren, kann es hier zu Problemen kommen, wenn versucht wird, den gleichen Namen an anderer Stelle zu verwenden (sog. {{#invoke:Vorlage:lang|flat}}). Dem kann durch die Festlegung von Namenskonventionen zwar vorgebeugt werden, es löst das Problem dennoch nicht.<ref>{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx | {{#if: Eric Fleegal’s WebLog | Eric Fleegal’s WebLog }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: 2018-04 | , festgestellt im {{#invoke:DateTime|format|2018-04|F Y}} }}. Suche im Internet Archive ){{#if: 2018-04-15 22:40:35 InternetArchiveBot | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: 2018-04 | , festgestellt im {{#invoke:DateTime|format|2018-04|F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx | {{#if:{{#invoke:URLutil|isWebURL|http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx}} || {{#if: || }} }} | {{#if: Eric Fleegal’s WebLog | {{#if: || }} | {{#if: || }} }} }}{{#if: 2018-04 | {{#if:{{#invoke:DateTime|format|2018-04|F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: 2018-04 | , festgestellt im {{#invoke:DateTime|format|2018-04|F Y}} }}. (Suche im Internet Archive. ) {{#if: 2018-04-15 22:40:35 InternetArchiveBot | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx | {{#if:{{#invoke:URLutil|isWebURL|http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx}} || {{#if: || }} }} }}{{#if: 2018-04 | {{#if:{{#invoke:DateTime|format|2018-04|F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[http://blogs.msdn.com/b/ericflee/archive/2008/04/17/pragma-once.aspx }} on MSDN Blogs; abgerufen am 19. August 2011.</ref>
Für compiler-eigene Definitionen und Definitionen in den Standard-Bibliotheken sind Bezeichner mit führendem Unterstrich (_) reserviert. Ein führender Unterstrich darf nach den aktuellen C- und C++-Standards daher nicht im Applikationscode verwendet werden.<ref>C++ standard (ISO/IEC 14882); C++ working draft N3242 (PDF; 10 MB), Abschnitt 17.6.4.3.2</ref><ref>C standard (ISO/IEC 9899); Committee Draft N1124 (PDF; 3,3 MB), Abschnitte 6.10.8 und 7.1.3/1.</ref>
Der CPP, der Präprozessor der GCC, erkennt solche Konstrukte automatisch, merkt sich die entsprechenden Dateien und überspringt diese bei nochmaligem Einbinden.<ref name="cpp_onceonlyheaders">Once-Only Headers im GNU CPP Online Manual. Abgerufen am 19. August 2011.</ref>
Lösung über Spracherweiterungen (#pragma once)
Die meisten gebräuchlichen C- und C++-Compiler unterstützen heute die Spracherweiterung #pragma once. Diese sorgt ebenfalls dafür, dass eine (Header-)Datei nur einmal eingebunden wird, setzt jedoch auf höherer Ebene, direkt am Präprozessor, an und führt auch keine Makros in den globalen Namensraum ein.
Zur Verwendung genügt es, innerhalb der Header-Datei die Präprozessordirektive #pragma once einzufügen:
<syntaxhighlight lang="cpp"> // A.h
- pragma once
class A { /* ... */ }; </syntaxhighlight>
Diese Spracherweiterung wird von den folgenden C++-Implementierungen unterstützt:
- GCC,<ref>GCC 3.4 Release Series – Changes, New Features, and Fixes. Abgerufen am 16. Mai 2014.</ref>
- Clang,<ref> <templatestyles src="Webarchiv/styles.css" />{{#if:20140404052351
| {{#ifeq: 20140404052351 | *
| {{#if: clang: Pragma.cpp Source File | {{#invoke:WLink|getEscapedTitle|clang: Pragma.cpp Source File}} | {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20140404052351}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: clang: Pragma.cpp Source File | {{#invoke:WLink|getEscapedTitle|clang: Pragma.cpp Source File}} | {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2018-04-15 22:40:35 InternetArchiveBot | 2018-04-15 22:40:35 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20140404052351}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: clang: Pragma.cpp Source File | {{#invoke:WLink|getEscapedTitle|clang: Pragma.cpp Source File}} | {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2018-04-15 22:40:35 InternetArchiveBot | 2018-04-15 22:40:35 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: clang: Pragma.cpp Source File | {{#invoke:WLink|getEscapedTitle|clang: Pragma.cpp Source File}} | {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2018-04-15 22:40:35 InternetArchiveBot | 2018-04-15 22:40:35 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: clang: Pragma.cpp Source File | {{#invoke:WLink|getEscapedTitle|clang: Pragma.cpp Source File}} | {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}} }} ({{#if: {{#if: 2018-04-15 22:40:35 InternetArchiveBot | 2018-04-15 22:40:35 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: clang: Pragma.cpp Source File | {{#invoke:WLink|getEscapedTitle|clang: Pragma.cpp Source File}} | {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}} }}
}}}}}}}}{{#if:2018-04-15 22:40:35 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20140404052351|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html}}
|| {{#if: || }}
}}{{#if: clang: Pragma.cpp Source File
| {{#if: {{#invoke:WLink|isBracketedLink|clang: Pragma.cpp Source File}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://clang.llvm.org/doxygen/Pragma_8cpp-source.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}. Abgerufen am 16. Mai 2014.</ref>
- Microsoft Visual C++,<ref>MS Developer Network – once (C/C++). Abgerufen am 16. Mai 2014.</ref>
- Intel C++ Compiler,
- Comeau C/C++,<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20131211122659
| {{#ifeq: 20131211122659 | *
| {{#if: Comeau C++ 4.0 | {{#invoke:WLink|getEscapedTitle|Comeau C++ 4.0}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20131211122659}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Comeau C++ 4.0 | {{#invoke:WLink|getEscapedTitle|Comeau C++ 4.0}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20131211122659}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Comeau C++ 4.0 | {{#invoke:WLink|getEscapedTitle|Comeau C++ 4.0}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Comeau C++ 4.0 | {{#invoke:WLink|getEscapedTitle|Comeau C++ 4.0}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Comeau C++ 4.0 | {{#invoke:WLink|getEscapedTitle|Comeau C++ 4.0}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} ({{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Comeau C++ 4.0 | {{#invoke:WLink|getEscapedTitle|Comeau C++ 4.0}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }}
}}}}}}}}{{#if:2019-09-11 17:36:32 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20131211122659|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}}
|| {{#if: || }}
}}{{#if: Comeau C++ 4.0
| {{#if: {{#invoke:WLink|isBracketedLink|Comeau C++ 4.0}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}−<templatestyles src="Webarchiv/styles.css" />{{#if:20131211122659
| {{#ifeq: 20131211122659 | *
| {{#if: Pre-Release – User-Documentation: Pragmas | {{#invoke:WLink|getEscapedTitle|Pre-Release – User-Documentation: Pragmas}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20131211122659}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Pre-Release – User-Documentation: Pragmas | {{#invoke:WLink|getEscapedTitle|Pre-Release – User-Documentation: Pragmas}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20131211122659}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Pre-Release – User-Documentation: Pragmas | {{#invoke:WLink|getEscapedTitle|Pre-Release – User-Documentation: Pragmas}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Pre-Release – User-Documentation: Pragmas | {{#invoke:WLink|getEscapedTitle|Pre-Release – User-Documentation: Pragmas}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Pre-Release – User-Documentation: Pragmas | {{#invoke:WLink|getEscapedTitle|Pre-Release – User-Documentation: Pragmas}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }} ({{#if: {{#if: 2019-09-11 17:36:32 InternetArchiveBot | 2019-09-11 17:36:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Pre-Release – User-Documentation: Pragmas | {{#invoke:WLink|getEscapedTitle|Pre-Release – User-Documentation: Pragmas}} | {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}} }}
}}}}}}}}{{#if:2019-09-11 17:36:32 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20131211122659|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html}}
|| {{#if: || }}
}}{{#if: Pre-Release – User-Documentation: Pragmas
| {{#if: {{#invoke:WLink|isBracketedLink|Pre-Release – User-Documentation: Pragmas}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.comeaucomputing.com/4.0/docs/userman/pragma.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}. Abgerufen am 16. Mai 2014.</ref>
- C++Builder XE3,<ref>#pragma once - RAD Studio XE3. Abgerufen am 16. Mai 2014.</ref>
- Digital Mars C++.<ref>Pragmas #pragma once. Abgerufen am 16. Mai 2014.</ref>
Einzelnachweise
<references />
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- C (Programmiersprache)
- C++