2013-03-13 14 views
10

mia funzione principale è come segue:Passando Argomento 1 rigetti qualificatori di tipo puntatore bersaglio

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

Il compilatore restituisce l'avvertimento:

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

Per riferimento, huffenc prende un ingresso char*, e la funzione viene eseguita, con l'input di esempio "senza senso" via ./huffenc senselessness

Cosa potrebbe significare questo avvertimento?

+5

Tu dici che 'huffenc' prende un' char * ', ma lo stai passando a' char const * '... –

+0

Davvero? Questo significa che devo usare la coercizione di tipo su di esso? –

+0

Penso che potresti fare riferimento a questa domanda anche http://stackoverflow.com/questions/2316387/initialization-discards-qualifiers-from-pointer-target-type – Ganesh

risposta

15

Significa che si passa un argomento const a una funzione che accetta un argomento non- const, che è potenzialmente negativo per ovvi motivi.

huffenc probabilmente non ha bisogno di un argomento non const, quindi è necessario un const char*. Tuttavia, la tua definizione di main non è standard.

Il C99 sezione standard 5.1.2.2.1 (all'avvio del programma) afferma:

La funzione chiamata all'avvio del programma prende il nome principale. L'implementazione non dichiara il prototipo per questa funzione. Sarà definita con un tipo di ritorno di int e senza parametri:

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

o con due parametri (di cui qui come argc e argv, anche se tutti i nomi possono essere utilizzati, in quanto sono locali alla funzione in cui sono dichiarate):

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

o equivalente; 9) o in qualche altra implementazione-d modo fi nito.

E continua a dire ...

... I parametri argc e argv e le corde puntato dalla matrice argv deve essere modi fi grado dal programma, e mantenere la loro ultimi valori memorizzati tra l'avvio del programma e la chiusura del programma.

Problemi correlati