Warnung: Parameternamen (ohne Typen) in Funktionsdeklaration
Rookie-Frage zur info.
Immer, wenn ich kompilieren/ausführen des Codes, extern tolayer2(rtpktTo1); ich eine Warnung erhalten.
Die Warnung liest, wie der Titel, Warnung: Parameternamen (ohne Typen) in Funktionsdeklaration
Jede Hilfe dankbar.
node0.c
extern struct rtpkt {
int sourceid; /* id of sending router sending this pkt */
int destid; /* id of router to which pkt being sent
(must be an immediate neighbor) */
int mincost[4]; /* current understanding of min cost to node 0 ... 3 */
};
/* Create routing packets (rtpkt) and send to neighbors via tolayer2(). */
struct rtpkt rtpktTo1;
rtpktTo1.sourceid = 0;
rtpktTo1.destid = 1;
rtpktTo1.mincost[0] = minCost[0];
rtpktTo1.mincost[1] = minCost[1];
rtpktTo1.mincost[2] = minCost[2];
rtpktTo1.mincost[3] = minCost[3];
extern tolayer2(rtpktTo1);
prog3.c
tolayer2(packet)
struct rtpkt packet;
{
/* This has a lot of code in it */
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Zuordnungen zu
rkpktTo1.
* sind anscheinend nicht in einer Funktion oder Erklärung, es sei denn, dies ist ein code-fragment. Wickeln Sie Sie in eine Funktion. Die Warnung ist ein wenig irreführend.Die Erklärung der
tolayer2()
sollte der Rückgabetyp als auch parameter geben. Da es nicht ein,int
angenommen. Dies kann nicht das sein, was beabsichtigt ist, aber es sollte kompilieren, ohne Warnungen und Fehler:node0.c
prog3.c
Übergabe eines Struktur-durch-Wert oft nicht angemessen, so dass ich es geändert haben pass-by-reference.
In der Erklärung
extern tolayer2(rtpktTo1);
,rtpktTo1
ist ein parameter-Namen (wie die Fehlermeldung sagt), während Sie geben sollte, eine Art, die es gibt:oder
oder
oder ähnliches, denn das ist das, was der compiler muss wissen, über Ihre Funktion, bevor Sie die Kompilierung der client-code. Der parameter name ist nutzlos an den compiler, an dieser Stelle und daher optional.
(Und wirklich, sollten Sie einen Rückgabetyp, und beachten Sie, dass
extern
hat keine Bedeutung in Ihremstruct
definition.)In prog3.c
Dies ist die alte syntax (sehr alt: bevor der ANSI genormten C 1989), aber vollkommen legal in C89 und C99. Verwenden Sie es nicht, obwohl: lieber