declaration

Deklaration ist der Teil des Unterprogramms (Prozedur oder Funktion), der das Protokoll (Header) liefert, aber nicht den Rumpf des Unterprogramms.
1
Antwort

C typedef const Argument

%Vor% Ist %Vor% das Gleiche wie %Vor% für alle typedefs? Gibt es einen Unterschied zwischen den letzten beiden? Ich dachte %Vor%     
02.04.2017, 14:11
2
Antworten

Was passiert, wenn ich eine Funktion mit einer leeren Parametertabelle deklariere und Argumente an sie weitergebe?

Zum Beispiel %Vor% Ausgabe: %Vor% Dieser Code ist gut kompiliert (ohne Warnungen mit clang) und läuft gut. Aber ich frage mich, was passiert mit den Werten, die an foo() übergeben werden? Werden sie in den Stapel geschoben oder einfac...
16.02.2016, 07:25
4
Antworten

Was sind die Unterschiede zwischen $, @,% in der Perl-Variablendeklaration? [Duplikat]

     Diese Frage hat hier schon eine Antwort:                   Was ist der Unterschied zwischen "$ this", "@ das 'und'% diese 'in Perl?                                      5 Antworten                                Beispiel: %V...
05.04.2011, 14:54
5
Antworten

Gibt es einen Unterschied zwischen "Object [] x" und "Object x []"?

Ich habe eine Legacy-Code-Basis in Java aktualisiert und eine Zeile wie diese gefunden: %Vor% Diese Zeile hat meine Aufmerksamkeit erregt, weil ich an diese Art von Code gewöhnt bin: %Vor% Der Inhalt des Arrays ist hier nicht wichtig. Ic...
09.02.2010, 14:08
6
Antworten

Ist es möglich, eine Klasse zu deklarieren, ohne sie zu implementieren? (C ++)

Ich weiß, dass die Fragen mehrdeutig erscheinen, aber ich kann mir keinen anderen Weg vorstellen, es zu sagen, aber, ist es möglich, so etwas zu tun: %Vor% ?     
16.05.2009, 01:50
11
Antworten

Was sind die Vor- und Nachteile der Trennung von Deklaration und Definition wie in C ++?

In C ++ können Deklaration und Definition von Funktionen, Variablen und Konstanten wie folgt getrennt werden: %Vor% Tatsächlich ist dies bei der Definition von Klassen oft der Fall. Eine Klasse wird normalerweise mit ihren Mitgliedern in ein...
14.03.2009, 11:18
3
Antworten

Ist dieser Code C ++ gültig?

Ist der folgende Code C ++ gültig? %Vor% Hinweis: Der Code kompiliert auf meinem g ++ - Compiler.     
13.10.2010, 05:04
5
Antworten

___ answer30817617 ___

Ihr Fall scheint ein Grenzfall zu sein, aber eine Include-Datei kann als eine Art Vertrag zwischen dieser Quelldatei und anderen Quelldateien angesehen werden, die diese Funktionen benötigen.

Indem Sie den "Vertrag" in eine Header-Datei schreiben, können Sie sicherstellen, dass die anderen Quelldateien wissen, wie diese Funktionen aufgerufen werden, oder Sie werden vielmehr sicher sein, dass der Compiler eingefügt wird der richtige Code und überprüfen Sie seine Gültigkeit zum Zeitpunkt der Kompilierung.

Was aber, wenn Sie dann (versehentlich) den Funktionsprototyp in der entsprechenden Quelldatei geändert haben?

Indem Sie in diese Datei den gleichen Header wie alle anderen einfügen, werden Sie bei der Kompilierung gewarnt, sollte eine Änderung versehentlich den Vertrag "brechen".

Update (aus @ tmlens Kommentar): Auch wenn dies nicht der Fall ist, kann eine Include-Datei auch Deklarationen und Pragmas wie #defines, typedef, enum, struct und inline verwenden als Compiler-Makros würde es keinen Sinn machen, mehr als einmal zu schreiben (eigentlich wäre das gefährlich an zwei verschiedenen Stellen zu schreiben, damit die Kopien nicht mit schlechten Ergebnissen zusammenfallen). Einige davon (z. B. ein Pragma-Struktur-Pragma ) könnten zu schwer zu erkennenden Fehlern werden.

    
___ answer30819602 ___

Dies ist nützlich, weil Funktionen deklariert werden können, bevor sie definiert werden.

So kommt es, dass Sie die Deklaration haben, gefolgt von einem Aufruf \ Aufruf, gefolgt von der Implementierung. Das musst du nicht, aber du kannst es.

Die Header-Datei enthält die Deklarationen. Sie können jederzeit aufrufen, solange der Prototyp übereinstimmt. Und solange der Compiler vor dem Kompilieren eine Implementierung findet.

    
___ qstntxt ___

Ich verstehe, dass wenn eine Quelldatei Funktionen aus einer anderen Datei referenzieren muss, sie ihre Header-Datei enthalten muss, aber ich verstehe nicht, warum die Quelldatei eine eigene Header-Datei enthält. Der Inhalt in der Header-Datei wird einfach kopiert und als Funktionsdeklaration in die Quelldatei eingefügt. Für Quelldatei, die eine eigene Header-Datei, eine solche "Deklaration" scheint mir nicht notwendig, in der Tat, Projekt noch kompilieren und verknüpfen kein Problem nach dem Entfernen der Header aus der Quelldatei, so was ist der Grund für die Quelldatei gehören eigene Kopfzeile?

    
___ answer30817652 ___

Der Hauptvorteil besteht darin, dass der Compiler die Konsistenz Ihrer Kopfzeile und ihrer Implementierung überprüft. Sie tun es, weil es bequem ist, nicht weil es erforderlich ist. Es kann durchaus möglich sein, das Projekt ohne diese Einbeziehung korrekt kompilieren und ausführen zu lassen, aber es kompliziert die Wartung Ihres Projekts auf lange Sicht.

Wenn Ihre Datei keine eigene Kopfzeile enthält, können Sie versehentlich in eine Situation geraten, in der die Vorwärtsdeklaration einer Funktion nicht mit der Definition der Funktion übereinstimmt - vielleicht weil Sie einen Parameter hinzugefügt oder entfernt haben und vergessen haben, die Kopfzeile zu aktualisieren . Wenn dies geschieht, würde der Code, der auf der Funktion mit Nichtübereinstimmung beruht, noch kompilieren, aber der Aufruf würde zu undefiniertem Verhalten führen. Es ist viel besser, wenn der Compiler diesen Fehler findet, was automatisch geschieht, wenn Ihre Quelldatei eine eigene Kopfzeile enthält.

    
___ tag123headerfiles ___ Header-Dateien werden in einigen Programmiersprachen verwendet, um Quellcode als eine einzelne Kopie zu speichern, die in mehreren Quelldateien wiederverwendet werden kann. Dieses Tag sollte für Fragen zur Verwendung von Header-Dateien verwendet werden. Ein Tag für die Programmiersprache wie C, C ++, PHP oder Ruby sollte zusammen mit diesem Tag verwendet werden, da die Verwendung der Header-Datei zwischen Programmiersprachen variieren kann. Dieses Tag wird normalerweise nicht mit der Java- oder Go-Programmierung und der Import-Anweisung verwendet. ___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer30822348 ___

Praktisches Beispiel - gehen Sie von folgenden Dateien in einem Projekt aus:

%Vor%

Beachten Sie, dass die Deklaration in %code% nicht mit der Definition in %code% übereinstimmt; Die Rückgabetypen sind unterschiedlich. %code% ruft die Funktion %code% auf, vorausgesetzt, sie gibt eine %code% gemäß der Deklaration in %code% zurück.

%code% und %code% werden getrennt voneinander kompiliert. Da %code% %code% wie in %code% deklariert, kompiliert es erfolgreich. Da %code% nicht %code% enthält, ist dem Compiler der Typkonflikt zwischen der Deklaration und der Definition nicht bekannt, so dass er ebenfalls erfolgreich kompiliert wird.

Wenn Sie die beiden Objektdateien miteinander verknüpfen, stimmt der Maschinencode für den Funktionsaufruf nicht mit dem überein, was der Maschinencode für die Funktionsdefinition erwartet. Der Funktionsaufruf erwartet, dass ein %code% -Wert zurückgegeben wird, aber die Funktionsdefinition gibt %code% zurück. Dies ist ein Problem, insbesondere wenn die beiden Typen nicht die gleiche Größe haben. Im besten Fall erhalten Sie ein Müll-Ergebnis.

Wenn Sie %code% in %code% einfügen, kann der Compiler diese Abweichung erkennen, bevor Sie Ihr Programm ausführen.

Und, wie in einer früheren Antwort darauf hingewiesen wird, wenn %code% irgendwelche Typen oder Konstanten definiert, die von %code% verwendet werden, dann müssen Sie sie definitiv einbeziehen.

    
___ tag123declaration ___ Deklaration ist der Teil des Unterprogramms (Prozedur oder Funktion), der das Protokoll (Header) liefert, aber nicht den Rumpf des Unterprogramms. ___ answer30817605 ___

Die Header-Datei sagt den Leuten, was die Quelldatei tun kann.

Also muss die Quelldatei für die Headerdatei ihre Verpflichtungen kennen. Deshalb ist es enthalten.

    
___

Ich verstehe, dass wenn eine Quelldatei Funktionen aus einer anderen Datei referenzieren muss, sie ihre Header-Datei enthalten muss, aber ich verstehe nicht, warum die Quelldatei eine eigene Header-Datei enthält. Der Inhalt in der Header-Datei w...
13.06.2015, 10:23
3
Antworten

Die Spiralregel über Deklarationen - wann ist sie falsch?

Ich habe kürzlich die Spiralregel zum Entschlüsseln komplexer Deklarationen gelernt, die mit einer Serie geschrieben worden sein müssen von typedefs. Der folgende Kommentar alarmiert mich jedoch: Eine häufig zitierte Vereinfachung, die nur...
28.04.2013, 06:52
2
Antworten

C ++: Verwirrende Deklarationssemantik

Nachdem ich mich an Perl und ein bisschen C versucht habe, versuche ich C ++ zu lernen und schon bin ich festgefahren von den Details und Fallstricken. Bedenken Sie Folgendes: - %Vor% Huh, warum der Unterschied? Zur Klärung : Die Verwend...
02.09.2009, 07:26