Welche bedeutung haben leere klammern bei der Funktionsdeklaration? C++

8 Antworten

Zu den bereits sehr guten Antworten möchte ich nochmal eine Kleinigkeit hinzufügen: Es gibt nämlich auch den den Fall, dass du evtl auf den Namen einer Funktion stößt, und zwar völlig ohne Klammern. Und das, auch wenn diese Argumente erwartet. :)

int foo(int x) {

return x + x;

}

int (*bar)(int) = foo;

Das ist ein Funktionszeiger, aber das kannst du erst mal sofort wieder vergessen. Ich habe das jetzt nur der Vollständigkeit halber erwähnt, und früher oder später wirst du so etwas sowieso kennen lernen, also mach dir darum jetzt erst mal keine Gedanken, falls du das nicht verstehst! :)

Allerdings guck dir unbedingt mal den sehr guten Kommentar von NoHumanBeeing an, indem es um ein anonymes Void-Argument bei ANSI-C geht. Das solltest du dir unbedingt jetzt schon merken! :)

Das ist eine Void Methode, es wird also keine Variable übergeben. In der Klammer würde eigentlich eine oder mehrere Variablen stehen, die dann in der Methode / Funktion verarbeitet werden. Der Aufruf der Funktion erfolgt dann ebenfalls mit leeren Klammern, wenn du einen Wert in die Methode geben möchtest, musst du einfach nur in beide leeren Klammern eine Variable übergeben. Noch Fragen? ;-)


NoHumanBeing  18.05.2015, 22:17

Nee, eine Methode ist es nur, wenn es zu einer Klasse gehört und "void" ist der Rückgabedatentyp, wenn man nichts zurückgeben möchte.

(Für "Insider": In ANSI C muss man tatsächlich (void) in die Argumentliste schreiben, wenn man keine Parameter entgegennimmt. Das wissen aber die wenigsten. Eine leere Parameterliste kann hier zu einem Stack-Overflow führen, falls der Aufrufer doch Argumente angibt! In C++ hat die leere Parameterliste "endlich" die Wirkung, die (void) in ANSI C hatte - und die eigentlich jeder Entwickler von einer leeren Parameterliste erwarten würde.)

2
hummelxy  19.05.2015, 09:16

Wieder etwas gelernt, danke für die Ergänzung! :-)

2
#include <cstdio>

int gibNull()
{
return 0;
}

int gibEinsMehr(int i)
{
return i + 1;
}

int main(int argc, char** argv)
{
int erg_a = gibNull();
int erg_b = gibEinsMehr(4);
printf("%d\n", erg_a);
printf("%d\n", erg_b);
return 0;
}

Eine Funktion erwartet Parameter, die andere nicht. Die Ausgabe des Programms lautet wie folgt.

0
5

Die Klammern sind eine leere Parameterliste.

Eine Funktion – oder in C++ eine Methode – soll eine Aufgabe erfüllen. Ob, wie und warum sei einfach mal zunächst ignoriert. Damit sie diese Aufgabe erfüllen kann, übergibt man ihr einen, mehrere oder keinen Übergabeparameter bzw. Eingabewert(e) und einen oder keinen Rückgabeparameter oder Ausgabewert.

Eine Methodendeklaration sieht formal so aus:

Ausgabewert Methode(Eingabewert)

Weiter oben habe ich geschrieben „einen, mehrere oder keinen“ Eingabewert. Wenn die Klammer hinter dem Methodenbezeichner leer bleibt, heisst das, sie muß ohne Eingabewerte rechnen. Wenn der Ausgabewert als „void“ bezeichnet wird, hat sie keinen Rückgabewert!

Der Compiler hätte nun mal gerne nach einer Funktion/Methode ein Klammerpaar, egal, ob da nun Argumente drin stehen oder nicht.

Ohne Klammern mag der Compiler nur Felder. (Also Eigenschaften und öffentliche Variablen der Klasse.)

Woher ich das weiß:Berufserfahrung – Software-Entwickler