Come posso sapere in quale standard è inserita la mia C?

4

Okies, domanda totalmente newbie qui. Posso leggere il codice, imitare il codice e capire le basi per essere mortali. Ma non ho mai avuto il tempo di capire cosa intendesse realmente ANSI C. Io guardo e codice. Lo sto facendo da quando avevo 15 anni e adesso ho 33 anni.

È passato un po 'di tempo dal momento in cui ho toccato C, ma tornare nel vivo delle cose con un po' di codice sul mio box Linux ha reso le cose difficili. Il mio codice è vecchio, tutto il resto è nuovo dalla distribuzione Linux a GCC. Quando vado a compilare, tutto funziona, ma ora ho molti nuovi avvertimenti che posso solo assumere un legame con un nuovo standard?

 gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

Come posso affrontare questo problema? Non ho mai capito bene la differenza tra C89 e C11. Come posso dire quello che sto usando?

Qualsiasi aiuto è molto apprezzato. Voglio provare a risolvere questi avvertimenti cercando anche di imparare ciò che chiaramente non sono riuscito a cogliere.

    
posta Fastidious 26.03.2016 - 04:13
fonte

2 risposte

5

Nel caso di gcc , puoi dire al compilatore quale standard C usare tramite l'opzione --std . L'esecuzione di man gcc lo spiegherà e elencherà tutti gli standard supportati. Nota che ci sono molte varianti tra cui alcuni "standard" che sono estensioni / varianti GCC specifiche agli standard ufficiali.

Se vuoi capire perché certe cose nel tuo codice ti stanno dando degli avvertimenti, dovresti risalire allo standard particolare a cui si riferisce il messaggio di avviso, e LEGGERE la parte rilevante dello standard.

But, I never really took the time to understand what ANSI C really meant.

Devi rimediare a questo. La tua scarsa comprensione è probabilmente la radice di un sacco di bug misteriosi che si presentano quando cambi i compilatori, il codice della porta da una piattaforma all'altra, eccetera. (Il tipo di cosa che molte persone incolpano erroneamente di "bug del compilatore".)

    
risposta data 26.03.2016 - 04:53
fonte
4

Se non stavi coscientemente cercando di seguire lo standard ANSI durante la scrittura del codice, molto probabilmente il tuo codice non sarà conforme a nessuno degli standard ANSI C.
Il motivo è dovuto al fatto che non ci sono compilatori C che per impostazione predefinita applicano uno standard ANSI C, ma accettano tutti il proprio dialetto di C.

Per aggiungerlo, se il tuo programma cerca di interagire con l'utente in un modo più fantasioso di "stampare un prompt e leggere una riga di testo", allora devi già andare oltre le strutture fornite da ANSI C. Se non ne sono a conoscenza, quindi è facile scegliere una soluzione specifica per il compilatore che si sta utilizzando in quel momento.

Se vuoi iniziare a seguire rigorosamente ANSI C, allora devi accettare che i tuoi programmi non possono fare fantasiose interazioni con gli utenti e non possono supportare molti altri tipi di connessioni verso il mondo esterno.

Se non ti interessa molto della conformità standard, ma vuoi che il tuo programma sia trasferibile tra diverse piattaforme e compilatori, allora dovresti sapere su ANSI C per sapere cosa fornisce e quindi scegliere deliberatamente portatile (3rd- party) per le funzionalità di cui hai bisogno oltre a ciò che ti offre il satndard.

    
risposta data 26.03.2016 - 09:10
fonte

Leggi altre domande sui tag