Forum: Compiler & IDEs "Funktionsdeklaration ist kein Prototyp"-Warnung


von Ulrich Schneider (Gast)


Lesenswert?

Ich habe erst vor ein paar Tagen mit C angefangen - meine Programme
laufen zwar, aber ich bekomme beim Kompilieren ständig die
Fehlermeldung
"Warnung: Funktionsdeklaration ist kein Prototyp"
angezeigt. Was mache ich falsch, wie werde ich diese Fehlermeldung
los?

Selbst Google war nicht wirklich hilfreich... :-(

von Steini (Gast)


Lesenswert?

Meine Glaskugel kann mir Deinen Quelltext nicht anzeigen, oder meine
Brille ist beschlagen, einfach den Quelltext posten, dann schaun mer
mal...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Naja, prinzipiell heißt die Warnung erstmal, dass du "old style"
(pre-ANSI-C) Funktionsdeklarationen schreibst.  Also zum Beispiel

foo()
{
   ...
}

statt

void foo(void)
{
   ...
}

von Ulrich Schneider (Gast)


Lesenswert?

Ahja, das war das Problem.

Ich hatte zwar den Rückgabetyp immer angegeben selbst wenn er void war,
aber bei einer leeren Parameterliste habe ich nur () statt (void)
geschrieben.

Danke Jörg!

von Steini (Gast)


Lesenswert?

@Jörg Wunsch (dl8dtl)

Respekt für Deine hellseherischen Fähigkeiten.
Wo gibt es den Bauplan für Deine Glaskugel...

von Rolf Magnus (Gast)


Lesenswert?

> aber bei einer leeren Parameterliste habe ich nur () statt (void)
> geschrieben.

() war eigentlich noch nie eine leere Parameterliste, sondern eine
nicht häher spezifizierte. Einer so deklarierten Funktion kann man beim
Aufruf auch fälschlicherweise Parameter übergeben, ohne daß der Compiler
da meckert.

von Jens (Gast)


Lesenswert?

@Steini

Einfach mal gelegentlich die Batterien tauschen oder ist deine Kugel
solarbetrieben? Vielleicht liegt es daran, daß die Sonne nicht scheint.

von Edd (Gast)


Lesenswert?

@Steini:

Jörg ist über das Stadium, in dem man noch eine Glaskugel braucht,
schon lange hinaus... ;-)

Edd

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> () war eigentlich noch nie eine leere Parameterliste, sondern eine
> nicht häher spezifizierte.

In C++ ist es eine leere Parameterliste und damit äquivalent zu
(void).  C++ hat keinen pre-C89-Ballast mit sich herumzutragen. ;-)

von Rolf Magnus (Gast)


Lesenswert?

> C++ hat keinen pre-C89-Ballast mit sich herumzutragen. ;-)

Dafür trägt es C89 selbst als Ballast mit sich rum. ;-)

von Daniel B. (khani)


Lesenswert?

Off Topic :
Dieser Glaskugel-Müll macht keinen Sinn. Mit der Zeit weiß man, was
bestimmte Symptome erzeugt auch wenn amn den Source-Code nicht kennt
(ich spreche aus Erfahrung).
Wenn man zu wenig Informationen zu einer Frage vom Fragesteller
bekommt, kann man doch auch freundlich aber bestimmt darauf hinweisen
und nicht den überlegenen Hammerversteher und -wisser herauskehren.

Der Ton ist manchmal einfach bescheiden hier.

MfG, Daniel.

von Hubert (Gast)


Lesenswert?

Die übliche Arroganz der "Profis" halt...

von flodo (Gast)


Lesenswert?

Uralter Thread, aber bis heute immer noch wahr: Der Ton in diesem Forum 
ist so mies dass ich hier praktisch keine Fragen mehr stelle und auch 
ungern noch welche beantworte.

Die Antwort, danke Jörg, hat mir dennoch weitergeholfen!
Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.