Einführung in Deklarationen in C++ im Rahmen der Lehre des Programmierens mit der Programmiersprache C++ [] (C++ Deklaration C++ Deklarationen C++ Funktionsdeklaration C++ Funktionsdeklarationen C++ Definition Unterschied), Lektion, Seite 721230
https://www.purl.org/stefan_ram/pub/c++_deklaration_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Deklarationen in C++

Alle bisher vorgestellten Definitionen sind auch Deklarationen. Eine Deklaration legt den Typ  eines Bezeichners fest. Eine Definition legt darüber hinaus auch fest, an welche Entität  (also an welches Objekt oder an welche Funktion) ein Bezeichner gebunden ist. Es gibt aber auch Deklarationen, die keine  Definitionen sind. Diese geben nur den Typ  eines Bezeichners an, ohne  dem Bezeichner eine Entität zuzuordnen. Bei einer Funktionsdeklaration sagt man auch, solch eine Deklaration lege den Prototyp  einer Funktion fest, um zu sagen, daß der Leser nun ihren Typ kenne. Zusammen mit der Angabe der nötigen Kopfdirektive bildet eine Deklaration auch die Synopsis  in Dokumentation.

Mindestens der Typ  eines Bezeichners muß bei Verwendung des Bezeichners bekannt sein, damit der Leser des Programms (z.B. der Übersetzer) prüfen kann, ob die Verwendung hinsichtlich des Typs korrekt ist. Soll ein Bezeichner erst nach  der Verwendung im Quelltext definiert werden, dann muß er also vor  der Verwendung zumindest deklariert werden.

In dem folgenden Beispielprogramm wird die Funktion "hallo" zunächst ohne Definition deklariert. Dabei wird nur der Typ  festgelegt. Die Funktion kann dann schon verwendet  werden, weil der Übersetzer ihren Typ  an der Stelle des Aufrufs kennt. Nach der ersten Verwendung folgt weiter unten im Quelltext die Definition (Implementation). Der Übersetzer liest den Quelltext nur einmal  von vorne bis hinten durch. Erst der Verbinder wird dann die Adresse der Funktion »hallo« an den Stellen des Aufrufs dieser Funktion einsetzen, das ermöglicht dann den Aufruf. Der Verbinder  kann solch Ersetzungen auch dann erzeugen, wenn eine Definition im Programmtext nach der Verwendung erfolgt.

Es ist erlaubt, einen Bezeichner mehrfach  zu deklarieren, wenn alle Deklarationen übereinstimmen. Eine Definition  eines Bezeichners darf jedoch in der Regel nur einmal innerhalb eines Namensraumes und Gültigkeitsbereichs erfolgen (abgesehen von bestimmten Ausnahmen, wie Überladungen).

main.cpp

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

void hallo(); // Deklaration von "hallo" (ohne Definition)

int main(){
hallo // Verwendung von "hallo"
(); }

void hallo(); // identische Redeklaration ist erlaubt

void hallo() // Definition und erneute Deklaration von "hallo"
{ ::std::cout << "Hallo!\n"s; } //

::std::cout
Hallo!

Ohne die Deklaration kennte der C++ -Leser die Funktion beim Aufruf nicht gut genug, um die Richtigkeit ihrer Verwendung zu prüfen.

main.txt

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

int main(){ hallo(); }

void hallo(){ ::std::cout << "Hallo!\n"s; }

Konsole

"deklaration.txt", line 3: error: identifier "hallo" is undefined
int main(){ hallo(); }
^

1 error detected in the compilation of "deklaration.txt".

Wenn eine Funktion vor  ihrer ersten Verwendung definiert wird, ist eine zusätzliche Deklaration nicht nötig.

main.cpp

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

void hallo() // Definition von "hallo"
{ ::std::cout << "Hallo!\n"s; } //

int main(){
hallo // Verwendung von "hallo"
(); }

::std::cout
Hallo!

Natürlich könnte der Eindruck entstehen, daß Deklarationen, die nicht gleichzeitig Definitionen sind, nicht so dringend benötigt werden, weil Funktionen ja vor  ihrer Verwendung definiert werden können. Das ist aber nicht immer möglich. Deklarationen, die nicht  gleichzeitig Definitionen sind, spielen eine wichtige Rolle. Beispielsweise kann ein C++ -Programm Funktionen der Standardbibliothek benutzen, die es nicht  selber definiert hat. Das geht aber nur dann, wenn diese vorher deklariert wurden. Diese Deklaration wird von den #include-Direktiven, wie beispielsweise »#include <iostream>« bewirkt, ohne daß der Quelltext der Definition von Standardfunktionen zugänglich sein muß.

Eine vorherige Deklaration einer Funktion erlaubt es auch, zwei Funktionen zu schreiben, die sich gegenseitig aufrufen.

Deklaration von Standardfunktionen *
The only reliable way to declare an object or function signature from the Standard C library is by including the header that declares it, notwithstanding the latitude granted in 7.1.4 of the C Standard.
Fußnote 179 zu 17.6.2.3p2 in C++ 2015

Kopf und Typ

Nicht alle Bestandteile des Kopfes einer Funktionsdefinition (des Teils vor der ersten geschweiften Klammer) legen den Typ der Funktion fest. Namen von Parametern und die const-Eigenschaft eines Parameters sind nur Implementationsfestlegungen, welche nicht  Bestandteil des Typ des Funktions sind. (Sie sind kein Bestandteil der Schnittstelle der Funktion.) Deswegen ist es in dem folgenden Programmbeispiel erlaubt, daß in einigen Deklaration von »next« das »const« fehlt oder der Parameter einen anderen Namen hat als in der Definition von »next(int)«.

main.cpp

#include <iostream>
#include <ostream>

int next( int );

int next( int const );

int next( int const number );

int main(){ std::cout << next( 3 ) << '\n'; }

int next( int const value ){ return value + 1; }

::std::cout
4

Lokale Deklarationen

Innerhalb eines Blocks ist die Definition  einer Funktion nicht möglich. Eine Funktion kann jedoch innerhalb eines Blocks deklariert  werden. Der Typ der so deklarierten Funktion ist dann nur innerhalb dieses Blocks bekannt. Daher spricht man auch von einer (zu diesem Block) lokalen  Deklaration.

main.cpp

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

int main(){
void hallo(); // lokale Deklaration von "hallo"
hallo // Verwendung von "hallo"
(); }

void hallo() // Definition von "hallo"
{ ::std::cout << "Hallo!\n"s; } //

::std::cout
Hallo!

Leere Klammern oder Schlüsselwort "void"?

Sowohl in einer Definition  als auch in einer Deklaration  können die runden Klammern leer sein oder das Schlüsselwort »void« enthalten, das ändert nichts an der Bedeutung. In dem folgenden Programmbeispiel »voidpar.cpp« gilt die zweite reine Deklaration daher als identische Redeklaration. Auch in der Definition kann das Schlüsselwort »void« in die runden Klammern geschrieben werden.

main.cpp

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

void hallo(); // Deklaration von "hallo" (ohne Definition)

void hallo( void ); // identische Redeklaration ist erlaubt

void hallo( void ) // Definition und erneute Deklaration von "hallo"
{ ::std::cout << "Hallo!\n"s; } //

int main(){ hallo(); }

::std::cout
Hallo!

Es wird empfohlen, das Schlüsselwort »void« nie in den runden Klammern zu verwenden, sondern diese gegebenenfalls immer leer zu lassen, da dies bei gleicher Bedeutung kürzer ist.

»void« als Parameterliste *

The parameter list (void) is equivalent to the empty parameter list.

»ISO/IEC 14882:1998(E)«
»ISO/IEC 14882:2003(E)«, 8.3.5 p2.

Fehlwerte für Parameter in Deklarationen

In eine Deklaration kann auch ein Fehlwert für eine Parameter geschrieben werden, der dann verwendet wird, wenn das entsprechende Argument fehlt.

main.cpp

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

int sum( int, int = 0 );

int main()
{ std::cout << sum( 3, 4 ) << '\n' << sum( 3 ) << '\n'; }

int sum( int const left, int const right )
{ return left + right; }

::std::cout
7
3

Es gibt einige Feinheiten zu Fehlwerten zu beachten, wenn mehrfache Deklarationen verwendet werden, auf die hier nicht eingegangen werden soll.

Übungsfragen

?   Deklaration und Definition

Welche der folgenden Aussagen sind wahr?

main.cpp
int main(){}

Übungsaufgaben

/   Funktionen umordnen (Refaktor)

Ändern Sie die Reihenfolge der Definitionen der Funktionen in dem folgenden Programm von „bottom-up “ (Aufgerufenes vor Aufrufendem) nach „top-down “ (Aufgerufenes nach Aufrufendem), ohne daß sich dadurch das Verhalten des Programms ändert. Dabei können zusätzliche Deklarationen zum Programm hinzugefügt werden.

main.cpp

#include <iostream>
#include <ostream>
#include <string> /* ::std::string */

using namespace ::std::literals;

void beta(){ ::std::cout << "Hallo!\n"s; }

void alpha(){ beta(); beta(); }

int main() { alpha(); beta(); }

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721230 stefan_ram:721230 C++ Deklaration C++ Deklarationen C++ Funktionsdeklaration C++ Funktionsdeklarationen C++ Definition Unterschied Unterschied Definition Deklaration C++; source, source code,sourcecode, Programmier sprache C++ Sprache, C++, CXX, C+, Programm, Programme, C++-Programm C++ Sprache C++ Programmiersprache C++ c++-Programme, Standard C++, Programmieren in C++, Programmieren in CXX, Programmieren in CPP, Programmieren in Cplusplus, Die Programmiersprache C++, Die Programmiersprache CXX, Die Programmiersprache CPP, Die Programmiersprache Cplusplus, Die Programmier sprache C++, Die Programmier sprache CXX, Die Programmier sprache CPP, Die Programmier sprache Cplusplus, CXX-Programmierung, C++-Programmierung, CPP-Programmierung, c-plus-plus, cpluplus-Programmierung, ANSI-C++, ANSI-CXX, ANSI-CPP, ANSI C++, ANSI CXX, ANSI-cpluscplus ISO-C++, ISO-CXX, ISO CPP, ISO C++, ISO CXX, ISO/IEC-C++, ISO/IEC-CXX, ISO/IEC CPP, ISO/IEC C++, ISO/IEC CXX, IEC-C++, IEC-CXX, IEC CPP, IEC C++, IEC CXX, International Standard ISO/IEC 14882 First edition 1998-09-01, ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), ASC X3, 7/27/98, c plus plus, C ++, cplusplus, c plus plus, Standard C+ programmieren, Stamdard C++ programmieren, Standart C+ programmieren, Stamdart C++ programmieren, INCITS/ISO/IEC 14882-1998, Information Technology - Programming Languages - C++ (formerly ISO/IEC 14882-1998), Programmieren in C++,Programmiersprache C++ CPP CXX Cplusplus c plus plus International Standard ISO/IEC 14882 First edition 1998-09-01, Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721230, slrprddef721230, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/c++_deklaration_de