2009-12-29 15 views
8

Ho recentemente attivato l'opzione -pedantic su gcc e ora ho circa due o tre pagine di avvisi "ISO C90 proibisce dichiarazioni e codici misti".Avviso "dichiarazione mista e codice", vale la pena indirizzarsi?

Il mio obiettivo con questo progetto è quello di essere in grado di distribuire su qualsiasi corrente principale sistema con compilatore C, quindi mi rendo conto che non sarebbe saggio presumere che C99 sarà supportato in tutto il mondo, ma è ancora la pena il mio tempo di indirizzare questi avvertimenti?

Esistono ancora sistemi con compilatori c che non supportano dichiarazioni e codici misti?

+0

-pedantic genera avvisi che sono, beh, pedanti. Direi che questi avvertimenti sono una perdita di tempo a scopi pratici. –

risposta

6

Bene, era/era vostro intenzione scrivere il vostro codice in C89/90 o in C99?

Poiché questo è l'unico avviso che sembra preoccuparsi, apparentemente il tuo codice è stato effettivamente scritto in C89/90. Se è davvero così e prevedi di restare con C89/90, allora rimango fedele alla C89/90 e sposto tutte le dichiarazioni all'inizio del blocco.

Se, d'altro canto, si è disposti e si prevede di passare a C99, le dichiarazioni "errate" non sono più un problema. Quindi la tua preoccupazione principale diventa il supporto della piattaforma/compilatore. I compilatori MS Visual Studio C sono compilatori C89/90. È un problema? (Considerando che GCC è disponibile su piattaforme Windows).

+0

Non intendo conformarmi a nessuno standard specifico, voglio solo essere sicuro che il mio codice verrà compilato su qualsiasi compilatore c mainstream –

+3

In questo caso la risposta è: no, non verrà compilato su alcun compilatore C mainsream. Il compilatore MS VIsual Studio aderisce a C89/90 e non compilerà tale codice. – AnT

1

Non sono sicuro che lo cambierei.

Tuttavia, se decidete di volerlo, è piuttosto facile (quindi forse dovreste); Basta avere tutte le dichiarazioni subito dopo aver iniziato un blocco di codice. Se è necessario definirli in seguito, utilizzare un altro blocco di codice annidato.

1

IIRC, Visual C++ non consente dichiarazioni miste e codice in modalità C.

Visual C++ è rimasto indietro nel supporto C99 in generale. Tuttavia, la situazione potrebbe essere migliorata di recente e potrebbe essere possibile compilare il codice in modalità C++ comunque.

2

Il compilatore di Visual Studio C non consente di miscelare dichiarazioni e codice. Probabilmente Microsoft non aggiungerà mai il pieno supporto C99 a Visual Studio; C non è abbastanza importante nel mondo di Windows.

5

Se si desidera essere -pedantic sullo standard C99, aggiungere l'opzione -std=c99.

Personalmente mi piace il vecchio stile non misto perché rende più facile controllare visivamente quali tipi di memoria sta utilizzando la funzione e decidere cosa potrebbe aver bisogno di free() prima di tornare.

0

Eliminerei quell'avvertimento particolare poiché il codice e le dichiarazioni di intermix non sono una funzionalità ampiamente supportata.

In realtà ho lo stesso problema con una libreria che sto scrivendo. Sto usando macro variadic ma quelli sembrano essere più supportati.

Per garantire che la mia libreria sia realmente utilizzabile da altri, la testerò con tutti i compilatori possibili. L'ho già fatto con Visual C++ Express e Pelles C e proverò qualche altro (OpenWatcom, Mars C e lcc-Win32 almeno).

Sfortunatamente SourceForge non fornisce più una farm di compilatori come era solito fare alcuni anni fa e non posso testarlo su compilatori Unix commerciali.