2013-03-13 11 views
10

My Hauptfunktion ist wie folgt:Passing Argument 1 verwirft Qualifizierer von Zeiger Zielart

int main(int argc, char const *argv[]) 
{ 
    huffenc(argv[1]); 
    return 0; 
} 

Der Compiler gibt die Warnung:

huffenc.c:76: warning: passing argument 1 of ‘huffenc’ discards qualifiers from pointer target type

Als Referenz huffenc nimmt einen char* Eingang, und die Funktion wird ausgeführt, mit dem Beispieleingang "Sinnlosigkeit" über ./huffenc senselessness

Was könnte diese Warnung bedeuten?

+5

Sie sagen, dass 'huffenc' ein' char * 'braucht, aber Sie übergeben es ein' char const * '... –

+0

Wirklich? Bedeutet das, dass ich eine Art Zwang benutzen muss? –

+0

Ich denke, dass Sie auf diese Frage auch http://stackoverflow.com/questions/2316387/initialization-discards-qualifiers-from-pointer-target-type – Ganesh

Antwort

15

Es bedeutet, dass Sie ein Argument const an eine Funktion übergeben, die ein nicht-const Argument verwendet, das aus offensichtlichen Gründen möglicherweise schlecht ist.

huffenc benötigt wahrscheinlich kein nicht const Argument, so dass es eine const char* dauern sollte. Ihre Definition von main ist jedoch nicht standardisiert.

Die C99-Standard Abschnitt 5.1.2.2.1 (Startprogramm) heißt es:

Die Funktion beim Programmstart aufgerufen wird, den Name main. Die Implementierung deklariert keinen Prototyp für diese Funktion. Es ist de fi mit dem Rückgabetyp int und ohne Parameter definiert sein:

int main(void) { /* ... */ } 

oder mit zwei Parametern (hier bezeichnet als argc und argv, obwohl alle Namen , verwendet werden, da sie sind lokal für die Funktion, in der sie) deklariert werden:

int main(int argc, char *argv[]) { /* ... */ } 

oder gleichwertig; 9) oder in einer anderen Implementierung-d efine Art und Weise.

Und geht weiter zu sagen ...

... Die Parameter argc und argv und die Saiten auf die durch den argv Array wird von dem Programm, sein modi fi Lage und behalten ihre zuletzt gespeicherte Werte zwischen Programm Start und Programmabbruch.

Verwandte Themen