Die Initialisierung verwirft Qualifizierer vom Zeigerzieltyp
Lesezeit: 2 Minuten
Kristall
Ich versuche, die Liste einer einfach verknüpften Liste zu drucken, auf die ich im Linktext verwiesen habe. Es funktioniert, aber ich bekomme die Compiler-Warnungen:
Initialization discards qualifiers from pointer target type
(bei Starterklärung = Kopf) und
return discards qualifiers from pointer target type
(on return-Anweisung) in diesem Code:
/* Prints singly linked list and returns head pointer */
LIST *PrintList(const LIST *head)
{
LIST *start = head;
for (; start != NULL; start = start->next)
printf("%15s %d ea\n", head->str, head->count);
return head;
}
Ich verwende XCode. Irgendwelche Gedanken?
Nur zu Ihrer Information, ich habe gcc nicht identifizierte Warnungen wie diese drucken lassen, von denen ich glaube, dass sie kontrolliert werden -Wwrite-strings. Es gibt -Wdiscarded-qualifiers, -Wcast-qual und klang -Wincompatible-pointer-types-discards-qualifiers die auch verwandt aussehen.
– jozxyqk
5. Oktober 2018 um 23:00 Uhr
GManNickG
Es ist dieser Teil:
LIST *start = head;
Der Parameter für die Funktion ist ein Zeiger auf eine Konstante, const LIST *head; Das bedeutet, dass Sie nicht ändern können, worauf es zeigt. Der obige Zeiger ist jedoch nicht konstant; Sie könnten es dereferenzieren und ändern.
Es muss sein const auch:
const LIST *start = head;
Gleiches gilt für Ihren Rückgabetyp.
Der Compiler sagt nur: “Hey, du hast zum Anrufer gesagt ‘Ich werde nichts ändern’, aber du eröffnest Möglichkeiten dafür.”
Dumme Frage, aber wie sieht ein konstanter Rückgabetyp aus? Ich habe versucht, im Internet zu suchen, und ich kann anscheinend keinen finden.
– Kristall
23. Februar 2010 um 6:00 Uhr
@Kristall – const LIST *PrintList(const LIST *head) { ... }
– R. Samuel Klatschko
23. Februar 2010 um 7:42 Uhr
The parameter for the function is a constant pointer – falsch. const LIST *head deklariert head als Zeiger auf eine Konstante LIST. Sehen: c-faq.com/decl/constparm.html — vielleicht ist das nur ein Missverständnis in der Formulierung.
– CivFan
17. September 2015 um 17:48 Uhr
Ich liebe es, wenn es in natürlicher Sprache erklärt wird, als ob der Compiler sprechen könnte. Tolle Erklärung!
– Zimano
27. Oktober 2015 um 9:38 Uhr
Erich
In der folgenden Funktion erhalten Sie die Warnung, auf die Sie gestoßen sind.
Nur zu Ihrer Information, ich habe gcc nicht identifizierte Warnungen wie diese drucken lassen, von denen ich glaube, dass sie kontrolliert werden
-Wwrite-strings
. Es gibt-Wdiscarded-qualifiers
,-Wcast-qual
und klang-Wincompatible-pointer-types-discards-qualifiers
die auch verwandt aussehen.– jozxyqk
5. Oktober 2018 um 23:00 Uhr