2012-03-11 10 views
6

Hasta ahora, sé dos estilos:..¿Cuántos estilos de escritura hay en C?

/* 1st style */ 
int foo(int a) { 
return a; 
} 

/* 2nd style */ 
int foo(a) 
int a; 
{ 
return a; 
} 

(vi alguien que escribe códigos en el segundo estilo que me sorprendió al principio, pero el segundo estilo trabajado (bajo gcc como probé) Esto me hizo curioso y quería hacer esta pregunta.)

Respuesta

0

La segunda es K & sintaxis de estilo RC, pero ahora está obsoleta. Checkout @Basile Starynkevitch's answer.

+0

Y IIRC esto ya está desfasada y en mi versión de "The C Programming Language, Second Edition, ANSI C" de 1990. –

+0

ya está obsoleta, agregándola. – phoxis

0

El segundo estilo es el estilo anterior y es compatible con la compatibilidad con versiones anteriores. No conozco ningún otro estilo en la parte superior de mi cabeza, pero debes usar el primer estilo (más nuevo). El segundo estilo (anterior) ya estaba en desuso cuando comencé a trabajar con C (1994).

12

No llamaré a estos estilos, sino a variantes de idiomas (o dialectos).

Un estilo de codificación es un conjunto de convenciones opcionales que pueden no seguirse. Por ejemplo, algunos estilos de codificación solicitan que los nombres de las macros sean mayúsculas (pero su código se compilará si no sigue esa regla).

Su "2 nd estilo" se llama Kernighan & Ritchie C. Es el antiguo C definido a finales de los años 70 (en la primera edición de un libro famoso en C por Kernighan y Ritchie, las ediciones subsiguientes se han ajustado a los estándares C posteriores). Es un lenguaje obsoleto.

Los compiladores actuales a menudo siguen la norma ISO C99 (publicada en 1999), que ha sido reemplazada por la nueva norma C11 (publicada en 2011).

Los compiladores de GCC aceptan el estándar C99 con el argumento del programa -std=c99. Recomiendo compilar con gcc -Wall -std=c99; Recientes compiladores de GCC (es decir, 4.6 y 4.7) aceptan -std=c11 IIRC para la nueva norma C11.

No codifique hoy en el antiguo dialecto de Kernighan y Ritchie C: es obsoleto y cada vez es menos compatible con compiladores. IMHO C99 es un buen estándar a seguir si es prudente. Y aproveche algunas de sus características (en particular, la capacidad de mezclar declaraciones y declaraciones dentro de un bloque; C dialectos más antiguos necesarios para poner todas las declaraciones al inicio de un bloque).

La norma ha progresado, en particular porque agrega características y es más precisa w.r.t. a los sistemas y las prácticas actuales (por ejemplo, procesadores de múltiples núcleos)

+2

Vas a confundir a las personas al llamar a ese idioma y no usar K & R C cuando el comentario se basa solo en esa línea de código. – Rob

+0

+1, pero: el viejo estilo es de los años 70, el nuevo estilo se definió en 1989; el compilador de MSVC todavía no sigue C99. –

2

Hay (al menos) dos desventajas cuando se utiliza el segundo estilo:

  1. Si el prototipo de función también está presente, el compilador no comprueba para el tipo de argumento adecuado. Y, si no recuerdo mal, el número de argumentos tampoco será verificado.
  2. Este estilo (K & R, 1st Ed) es válido solo por compatibilidad con versiones anteriores ... algún día, el estándar C (tal vez) no permitirá este estilo y sus programas se detendrán.

Además, para facilitar la lectura, se puede poner el tipo de retorno de la función en su propia línea (especialmente útil con los tipos de largo aliento de retorno como unsigned long int y encabezados):

int 
foo(int a) 
{ 
    return a; 
} 
+0

También hace esto para facilitar la extracción automática de documentación mediante scripts perl y awk. –

Cuestiones relacionadas