Norma para tipificación.

gcc 4.4.4 c89

Me pregunto si hay algún estándar que deba seguirse al crear tipos.

por ejemplo:

typedef struct date { } date_t; 

También he visto a gente poner un capital como este:

 typedef struct date { } Date; 

O para variables

 typedef unsigned int Age; 

o esto

 typedef unsigned int age_t; 

¿Hay algún estándar que deba seguirse? Personalmente prefiero la fijación posterior con un _t.

Muchas gracias por las sugerencias,

Gran parte de esto se reduce a preferencias personales, con la clave de ser coherente (o si tiene una convención de la empresa, use eso). El siguiente artículo tiene algunas guías de nombres:

http://www.montefiore.ulg.ac.be/~piater/Cours/Coding-Style/

Tenga en cuenta que cambia la parte ‘_t’:

 typedef struct node_t { void *content; struct node_t *next; } Node; typedef enum season_t { SPRING, SUMMER, FALL, WINTER } Season; 

Hubo una discusión anterior sobre las convenciones de nomenclatura de C aquí:

¿Cuáles son las convenciones de nombres más comunes en C?

Si está trabajando en una plataforma que sigue los estándares POSIX, debe tener en cuenta que cualquier identificador que finalice en _t está reservado para los tipos definidos por POSIX, por lo que no es recomendable seguir la misma convención para sus propios tipos.

Usted puede simplemente utilizar

 typedef struct toto toto; 
  1. La struct toto (etiqueta) y el typedef nombre toto (identificador) están en diferentes “namescopes” de C, por lo que son compatibles, pero apuntan al mismo tipo al final.
  2. Como beneficio adicional, esto también es compatible con C ++, que generalmente tiene implícitamente un typedef .
  3. Como otra ventaja adicional, esto impide declarar una variable toto que puede ser bastante confusa a veces.

El estilo es una cosa muy personal y muy subjetiva, le recomiendo que use solo lo que quiera, o cualquier convención que se use en su organización.

Sigue lo que el rest de la gente hace por tu proyecto para que todo se mantenga consistente. De lo contrario, ambos son técnicamente aceptables.

No creo que exista ninguna convención de denominación “estándar”. De hecho, varían tan violentamente entre los proyectos (y también entre otros lenguajes como C ++ o Java) que personalmente he adoptado camelCase en todos los idiomas.

Siempre defino mis estructuras a través de typedef , así que solo uso el nombre que le hubiera dado de otra manera (esto es también lo que hace la API de Win32). En caso de que necesite una estructura de autorreferencia, prefijo un _ al nombre de la estructura bruta:

 typedef struct _Node { _Node *next; } Node; 

En general, la mayoría de los idiomas permiten el uso de sentencias de casos para clases o tipos no estandarizados. Creo que esta es la mejor práctica, y en los idiomas que lo permiten, además use espacios de nombres o módulos para evitar choques. En idiomas que no lo hacen (como C), un prefijo donde sea necesario nunca se desvía. Para usar un ejemplo en varios idiomas para algo en lo que estoy trabajando actualmente:

 C: typedef uint32_t CpfsMode; C++: namespace Cpfs { typedef uint32_t Mode; } Python: cpfs.Mode = int