2010-11-21 22 views
14

C99 agrega varias funciones útiles al lenguaje, sin embargo, me resulta difícil recomendar cualquier práctica que dependa de C99. La razón de esto es porque hay pocas (¿alguna?) Implementaciones reales del lenguaje C99. Claro, hay un apoyo limitado en algunos compiladores, pero nadie quiere dedicar tiempo a escribir el código C solo para que no sea comercial.¿Cuál es el objetivo del estándar C99?

Esto es frustrante dado que el estándar fue escrito y finalizado hace más de 10 años. Además, oigo discusiones de un C1x de vez en cuando, y me pregunto por qué alguien estaría tomando medidas para revisar el idioma dado que la versión actual del idioma aún no se ha implementado.

Así que mi pregunta es, como programador de Joe C hoy, qué es útil w.r.t. el estándar C99 para mí (si existe)?

+1

Al igual que los bypass, debes construir estándares, supongo. Pero gcc realmente intenta acercarse a la implementación de C99, a diferencia de MSVC. –

+1

@Pascal: Me resulta difícil creer que el apoyo de C99 es muy importante para los desarrolladores de la lista de prioridades de GCC dado que han tenido diez años y todavía partes importantes del nuevo estándar aún no se han implementado. –

+2

@Billy La revisión actual de C99 es de 2007. –

Respuesta

9

MSVC no es compatible, ni lo será nunca, con C99. Pero Microsoft tiene pocos incentivos para actualizar su compilador de C. No es como si perderían mucho negocio por eso.

Pero hay muchos compiladores compatibles con C99.

http://en.wikipedia.org/wiki/C99#Implementations

En cuanto a gcc:

http://gcc.gnu.org/c99status.html

Tienes razón en que quizá C99 no es útil para el código de la biblioteca (y puede que nunca podrá contar con el apoyo de Microsoft), pero si usted está trabajando en un proyecto interno o personal donde puede elegir compiladores y herramientas, entonces la portabilidad no es un gran problema.

+2

+1 por una respuesta que realmente responde mi pregunta en lugar de discutir conmigo. –

+4

@Billy Bueno, nadie discute con el hecho de que MSVC no es compatible con C99. Si eso es lo que quería escuchar, debería haber reformulado la pregunta. –

+2

MS admitirá las características C99 una vez que los nuevos estándares C++ incorporen oficialmente muchas de ellas. No les importa C, pero no quieren quedarse atrás en el mundo C++. –

4

Debe usar C99 siempre que no esté bloqueado en un entorno que no sea compatible con C99 (sistemas incrustados más notablemente).

Y sí, si sabe que su biblioteca será utilizada por personas que usan MSVC, no puede usar las características C99 en las interfaces, pero no hay ninguna razón para no usar C99 en la implementación (aparte de la biblioteca características de las dependencias por supuesto).

Respuesta original: "¿Qué compiladores no son compatibles con C99? Además, cuando pasa de los compiladores a las herramientas, C99 es más compatible que C89".

+4

No conozco ningún compilador que admita C99. Ni GCC ni MSVC lo hacen, y estos son los únicos compiladores con los que he tratado de forma regular. –

+2

@Billy Bueno, si considera este estado como no compatible http://gcc.gnu.org/c99status.html, entonces supongo que no puede codificar nada :-) Tan pronto como un estándar es "compatible", ya está obsoleto. MSVC en realidad oficialmente es compatible con C? –

+1

Según esa página, falta la mayoría de los elementos útiles en 'wctype.h' y' stdint.h'. No estoy al 110% familiarizado con las otras cosas que faltan, pero esas son grandes piezas de funcionalidad que no están ahí. –

7

En cuanto a C1x, creo que vale la pena señalar que el comité de estándares es consciente de que C99 no ha sido ampliamente adoptado y no quiere repetir los mismos errores (o empeorar la situación). Desde el C1x charter:

A diferencia de C9X, el consenso en la reunión de Londres fue que no debería haber ningún invención, sin excepción. Solo deben considerarse las características que tienen un historial y están en común con el uso mediante una implementación comercial. También se debe tener cuidado de estandarizar estas características de una manera que haría compatibles la implementación estándar y comercial .

Y:

La norma original tenía una recepción muy positiva por parte de tanto el usuario como proveedor comunidades. Sin embargo, C99 no se ha recibido tan ampliamente.

+0

+1 de referencia. –

+3

Me resulta difícil tomar estas declaraciones en serio cuando están considerando la adopción de todas esas funciones de MS inútiles que se crearon para descarrilar C y la portabilidad, funciones que nadie más quiere admitir. –

+5

@R ..: Si se refiere a las diversas versiones "seguras" de las funciones de cadena, creo que son algo bueno. (O pueden ir alternativamente con 'strlcpy' y' strlcat'; no me importa). Por definición, inventar cualquier extensión "descarrila la portabilidad", pero el punto de incorporar uno en el estándar es arreglar eso. Además, si eso significa que Microsoft realmente podría querer subir a bordo con C1x, sería genial. – jamesdlin

1

FreeBSD ahora utiliza Clang para las compilaciones del kernel y es compatible con C99.

+2

En realidad, Clang solo admite C99 :-) –

14

C99 trae características que realmente hace la programación en C más fácil y más segura error:

  • inicializadores designados
  • literales compuestos
  • for variables de -scope
  • fijos tipos enteros anchura

El lenguaje también es mucho más expresivo con

  • macros variadic
  • inline funciones

En mi máquina Linux que tengo cuatro compiladores que apoyan C99 en un grado satisfactorio que hacen que este se puede usar en una base diaria: gcc, clang, opencc y icc .

Los dos primeros son compiladores de fuente abierta donde clang intenta ser compatible con el código gcc (lo que significa que la compatibilidad con C99 es más o menos la misma).

Los dos últimos son de los dos principales productores de CPU y son comerciales, pero con una política de licencia generosa para usuarios no comerciales. Su C99 es un poco menor, en particular su compatibilidad con inline parece no ser completamente consistente con el estándar, sin embargo.

+0

¿Desea vincular el sitio web canónico de opencc? –

+0

@Matt, a la derecha, ver mi edición. –

+0

Gracias y cuatro –

2

Si le importa el rendimiento, no hay forma de que se acerque al restrict.

Cuestiones relacionadas