GNU/Linux >> Linux Esercitazione >  >> Linux

Perché ottengo un tipo in conflitto per l'errore getline durante la compilazione dell'esempio di riga più lungo nel capitolo 1 di K&R2?

La funzione in conflitto getline() è un'estensione GNU/POSIX.

K&R afferma di affrontare specificamente ANSI C nel loro libro (cf), che non fornisce questa funzione.

Gli autori presentano la guida completa alla programmazione in linguaggio C standard ANSI.

Per impostare gcc in "modalità di compatibilità K&R" è possibile specificare le modalità ANSI o ISO per la compilazione. Questi hanno lo scopo di disabilitare le estensioni, ad esempio la funzione getline() .Questo potrebbe eventualmente eliminare la necessità di modificare anche altri esempi forniti da K&R.

Ad esempio, la seguente compilazione va bene:

$ gcc test.c -ansi
$ gcc test.c -std=c89

(Tranne che si lamentano del tipo di ritorno predefinito implicito di main() con -Wall .)

Apparentemente su alcuni sistemi, queste modalità potrebbero non funzionare come presentato qui (apparentemente alcune versioni di Mac OS non riescono a disabilitare correttamente tutte le estensioni). L'ho testato con successo sulla mia macchina:

$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Il problema è che getline() è una funzione di libreria standard. (definito in stdio.h ) La tua funzione ha lo stesso nome e quindi è in conflitto con essa.

La soluzione è cambiare semplicemente il nome.


Questo perché il stdio.h avere un getline() funzione.

Quindi una cosa semplice per farlo funzionare sarebbe rinominare la tua funzione in my_getline()

Entrambi getline() e getdelim() originariamente erano GNU estensioni. Sono stati standardizzati in POSIX.1-2008 .


Linux
  1. Suggerimenti Bash per tutti i giorni dalla riga di comando

  2. Quando viene visualizzato il messaggio di errore "lavori:non trovati"?

  3. Come unire la riga successiva quando una riga corrisponde a un'espressione regolare per l'intero documento in Vi?

  4. Perché `zip` in un ciclo For funziona quando il file esiste, ma non quando non lo è?

  5. Trap, Err, e facendo eco alla linea di errore?

4 Strumenti di markdown per la riga di comando di Linux

Perché usare il desktop Pantheon per Linux Elementary OS

3 gestori di password per la riga di comando di Linux

dopo aver installato monit quando eseguo monit status myproc ottengo un errore durante la connessione al demone monit

Come trovo il numero di riga in Bash quando si è verificato un errore?

ottenere un errore nella riga di comando errata durante il tentativo di estrarre l'archivio 7zip su Linux