Beim Deklarieren von Funktionen in C sollten Sie einen Prototyp setzen, in dem Sie die Namen von Parametern nicht schreiben müssen. Nur mit seiner Art ist genug.
void foo(int, char);
Meine Frage ist, ist es eine gute Praxis, auch Namen von Parametern einzuschließen?
Ja, es gilt als gute Praxis, die Argumente auch in den Prototypen zu benennen.
Normalerweise haben Sie alle Ihre Prototypen in der Header-Datei, und der Header ist möglicherweise das Einzige, was Ihre Benutzer jemals überprüfen können. Aussagekräftige Argumentnamen zu haben, ist also die erste Ebene der Dokumentation für Ihre API.
Ebenso sollten Kommentare darüber, was die Funktionen tun (natürlich nicht, wie sie implementiert sind), zusammen mit ihren Prototypen in den Header kommen.
Eine gut geschriebene Header-Datei kann der wichtigste Teil Ihrer Bibliothek sein!
Nebenbei bemerkt ist die Konstanz der Argumente ein Implementierungsdetail. Wenn Sie also eine Argumentvariable in Ihrer Implementierung nicht mutieren, nur lege das const
in der Umsetzung:
/* Header file */
/* Computes a thingamajig with given base
* in the given number of steps.
* Returns half the thingamajig, or -1 on error.
*/
int super_compute(int base, int steps);
/* implementation file */
#include "theheader.h"
int super_compute(const int base, int steps)
{
int b = 2 * base;
while (--steps) { b /= 8; } /* no need for a local variable :-) */
return -1;
}
Ich empfehle auf jeden Fall, die Namen der Parameter anzugeben. Wenn Sie eine Bibliothek schreiben, ist es für diejenigen, die Ihre Bibliothek verwenden werden, sicherlich nützlich, aus ihrem Prototyp in Ihren Header-Dateien entnehmen zu können, was eine Funktion tut. In Betracht ziehen memcpy
zum Beispiel. Ohne die Namen der Parameter wissen Sie nicht mehr, welches die Quelle und welches das Ziel ist. Schließlich ist es einfacher, die Namen einzuschließen, als sie zu entfernen, wenn Sie Ihre Funktionsdefinition kopieren, um sie in einen Prototyp zu verwandeln. Wenn Sie die Namen beibehalten, müssen Sie am Ende nur noch ein Semikolon hinzufügen.
Einige IDEs und Editoren ziehen Prototypinformationen aus Header-Dateien und stellen die Parameterinformationen als Hinweise während der Eingabe bereit. Wenn die Namen verfügbar sind, hilft das, Code schneller zu schreiben (und kann dabei helfen, einige Fehler zu vermeiden).
Ich dachte, C benötigt Parameternamen (ich weiß jedoch nichts über C99). Vielleicht denken Sie an C++.
– Marcelo Cantos
17. November 2011 um 21:55 Uhr
@MarceloCantos: nein, C benötigt sie nicht; noch besser, der C-Standard erlaubt sogar noch, eine leere Parameterliste zu lassen, was bedeutet, dass keine Informationen über die Parameter gegeben werden (C99, §6.7.5.3, ¶14); im Gegensatz zu C++, wo es bedeutet, dass die Funktion keine Argumente akzeptiert.
– Matteo Italien
17. November 2011 um 22:11 Uhr
@WTP: das war ein ironisches „besser“ 🙂 Sogar der Standard sagt (§6.11.6 ¶1), dass „die Verwendung von Funktionsdeklaratoren mit leeren Klammern (keine Parametertyp-Deklaratoren im Prototypformat) eine veraltete Funktion ist.“, da es einen Teil des Zwecks von Prototypen zunichte macht.
– Matteo Italien
17. November 2011 um 22:16 Uhr
@MatteoItalia: Mir ist gerade aufgefallen, dass ich Deklarationen und Definitionen verwechsle. EIN Definition erfordert Parameternamen in C – und nicht in C++ – aber die obige Deklaration ist in beiden gültig.
– Marcelo Cantos
17. November 2011 um 22:17 Uhr