Warum enthalten Funktionsprototypen Parameternamen, wenn sie nicht benötigt werden?

8

Ich dachte immer, dass ein Funktionsprototyp die Parameter der Funktion und deren Namen enthalten muss. Allerdings habe ich das gerade ausprobiert:

%Vor%

Und es hat funktioniert! Ich habe sogar versucht, mit extremer Vorsicht zu kompilieren:

%Vor%

Und es hat immer noch funktioniert. Meine Frage ist also, wenn Sie in Funktionsprototypen keine Parameternamen benötigen, warum ist das so üblich? Gibt es irgendeinen Zweck dafür? Hat es etwas mit der Signatur der Funktion zu tun?

    
Lockhead 08.03.2011, 15:00
quelle

6 Antworten

17

Nein, diese sind nicht notwendig und werden vom Compiler tatsächlich ignoriert. Sie können ihnen sogar verschiedene Namen in verschiedenen Deklarationen geben; Folgendes ist völlig legal:

%Vor%

Der Grund, sie einzubringen, ist Dokumentation:

  • Wenn jemand Ihre Header-Datei liest, kann er auf einen Blick erkennen, wofür jeder Parameter verwendet wird.
  • Wenn Sie eine ausgefallene IDE verwenden, können Sie die Parameternamen anzeigen, wenn Sie den Funktionsaufruf beginnen.
  • Dokumentationswerkzeuge wie Doxygen können die Parameternamen analysieren und in der Dokumentation anzeigen.
Thomas 08.03.2011, 15:06
quelle
8

Parameternamen sind vollständig optional und haben keinen Einfluss auf die Kompilierung. Sie können dort zur besseren Lesbarkeit des Codes platziert werden.

    
Christopher Armstrong 08.03.2011 15:02
quelle
4

Sie brauchen keine Parameternamen in Deklarationen. Sie sind reine Dokumentation.

Sie brauchen nicht einmal Namen in Definitionen:

%Vor%

kompiliert gut in C ++ (aber nicht in C). Dies ist manchmal nützlich für z.B. Vererbung, Überladung, Funktionszeiger.

    
Fred Foo 08.03.2011 15:02
quelle
3

Sie müssen keine Parameternamen in Funktionsprototypen aufnehmen. Sie benötigen nur die vollständige Signatur, die die Parametertypen und (im Falle von Funktionsvorlagenspezialisierungen) die Rückgabewerte enthält.

Es ist jedoch immer noch üblich, Parameternamen einzubeziehen, um selbstdokumentierenden Code zu schreiben. Das heißt, eine Funktion mit dieser Deklaration:

%Vor%

ist leichter zu verstehen, wenn man nur den Prototyp betrachtet, vielleicht als diesen:

%Vor%

Viele moderne IDEs werden die Parameternamen auch während der Eingabe anzeigen, wenn Sie Code schreiben, der diese Funktion aufruft. Sie können diese Informationen möglicherweise nicht anzeigen, wenn Sie die Parameternamen nicht in den Prototyp aufnehmen.

    
John Dibling 08.03.2011 15:06
quelle
1

Es hat viel mit der Signatur der Funktion zu tun.

Einer der Vorteile der Verwendung von .h-Dateien ist, dass wenn jemand vorbeikommt und wissen möchte, was Ihr Programm / api macht, er sich Ihre Header-Datei ansehen und ein Gefühl dafür bekommen kann, welche Operationen ausgeführt werden , ihre Ein- und Ausgänge, wie alles zusammenpasst usw.

Wenn Sie auf eine Methode wie

stoßen würden %Vor%

das wäre viel weniger aussagekräftig als eine Methode mit einer Signatur von sagen:

%Vor%

Mit der zweiten erhalten Sie zumindest eine Vorstellung davon, welche Operationen ausgeführt werden und was gerade geschieht. Dies ist die Idee dahinter, selbst dokumentierenden Code zu schreiben.

Wenn Sie interessiert sind, können Sie sich Code Complete von Steve McConnell ansehen.

    
James 08.03.2011 15:07
quelle
1

Es gibt verschiedene Szenarien. Ich fand es sehr hilfreich im Umgang mit inheritance und virtual functions . Wenn Sie eine virtual function verwenden, die eine unbenutzte Warnung in der Unterklasse generiert, können Sie die Variablennamen weglassen.

    
Kahn 21.10.2016 10:02
quelle

Tags und Links