2009-12-29 21 views
8

He habilitado recientemente la opción -pedantic en gcc y ahora tengo alrededor de dos o tres páginas de "ISO C90 prohíbe las advertencias de declaración y código mixtos".Advertencia de "declaración y código mixtos", ¿vale la pena abordarlo?

Mi objetivo con este proyecto es poder desplegar en cualquier la corriente principal del sistema con el AC compilador, por lo que se dan cuenta de que no sería prudente asumir que el C99 será apoyado por todas partes, pero ¿es siquiera vale la pena mi hora de abordar estas advertencias?

¿Existen todavía sistemas con compiladores de c que no admiten la declaración mixta y el código?

+0

-pedantic provoca advertencias que son, bueno, pedantes. Diría que esas advertencias son una pérdida de tiempo para propósitos prácticos. –

Respuesta

6

Bueno, ¿tu intención fue escribir tu código en C89/90 o en C99?

Dado que esta es la única advertencia que parece estar preocupado, aparentemente su código fue escrito en C89/90. Si es así y planea seguir con C89/90, me quedaré con el estricto C89/90 y moveré todas las declaraciones al principio del bloque.

Si, por otro lado, está dispuesto y planea cambiar a C99, las declaraciones "extraviadas" ya no son un problema. Entonces su principal preocupación se convierte en el soporte de plataforma/compilador. Los compiladores de MS Visual Studio C son compiladores C89/90. ¿Es esto un problema? (Considerando que GCC está disponible en plataformas Windows).

+0

No pretendo cumplir con ningún estándar específico, solo quiero estar seguro de que mi código se compilará en cualquier compilador mainstream c –

+3

En ese caso, la respuesta es: no, no se compilará en ningún compilador de mainsream C. El compilador MS VIsual Studio se adhiere a C89/90 y no compilará tal código. – AnT

1

No estoy seguro de que lo cambie.

Sin embargo, si decides que quieres, es bastante fácil (así que tal vez deberías); Solo tiene todas sus declaraciones justo después de comenzar un bloque de código. Si definitivamente debe definirlos más tarde, use otro bloque de código anidado.

1

IIRC, Visual C++ no permite declaraciones mixtas y código en modo C.

Visual C++ se ha quedado rezagado en el soporte C99 en general. Sin embargo, la situación puede haber mejorado recientemente y, de todos modos, es posible compilar el código en modo C++.

2

El compilador C de Visual Studio no permite mezclar las declaraciones y el código. Microsoft probablemente nunca agregue compatibilidad total con C99 a Visual Studio; C no es lo suficientemente importante en el mundo de Windows.

5

Si quiere ser -pedantic sobre el estándar C99, agregue la opción -std=c99.

Personalmente, me gusta el estilo antiguo sin mezclar porque hace que sea más fácil auditar visualmente los tipos de memoria que utiliza la función y decidir lo que podría necesitar gratis() - ing antes de volver.

0

Eliminaría esa advertencia en particular ya que el código entremezclado y las declaraciones no son una característica ampliamente admitida.

En realidad tengo el mismo problema con una biblioteca que estoy escribiendo. Estoy usando macros variadic pero parecen ser más compatibles.

Para asegurar que mi biblioteca sea realmente utilizable por otros, voy a probarla con tantos compiladores como pueda. Ya lo hice con Visual C++ Express y Pelles C y probaré con otros (por ejemplo, OpenWatcom, Mars C y lcc-Win32).

Desafortunadamente SourceForge ya no proporciona una granja de compiladores como solía hacerlo hace algunos años y no puedo probarla en compiladores de Unix comerciales.