¿Cuáles son las convenciones de nomenclatura que se usan comúnmente en C? Sé que hay al menos dos:
- GNU / linux / K&R con menos_funciones_case
- ? nombre ? con funciones UpperCaseFoo
Estoy hablando de C solo aquí. La mayoría de nuestros proyectos son pequeños sistemas integrados en los que usamos C.
Aquí está el que estoy planeando usar para mi próximo proyecto:
Convención de nomenclatura C
Struct TitleCase
Struct Members lower_case or lowerCase
Enum ETitleCase
Enum Members ALL_CAPS or lowerCase
Public functions pfx_TitleCase (pfx = two or three letter module prefix)
Private functions TitleCase
Trivial variables i,x,n,f etc...
Local variables lower_case or lowerCase
Global variables g_lowerCase or g_lower_case (searchable by g_ prefix)
c
naming-conventions
JeffV
fuente
fuente
Respuestas:
Lo más importante aquí es la consistencia. Dicho esto, sigo la convención de codificación GTK +, que se puede resumir de la siguiente manera:
MAX_BUFFER_SIZE
,TRACKING_ID_PREFIX
.GtkWidget
,TrackingOrder
.gtk_widget_show()
,tracking_order_process()
.GtkWidget *foo
,TrackingOrder *bar
._refrobnicate_data_tables()
,_destroy_cache()
.fuente
static
y omitir el prefijo del módulo, por lo que sigtk_widget_show()
fuera una función con alcance de archivo, se convertiría simplementewidget_show()
con la clase de almacenamiento estático agregado._
implementación y el uso futuro. Hay algunas excepciones a los nombres que comienzan con,_
pero en mi opinión, no vale la pena memorizar. Una regla segura para seguir es nunca usar nombres que comiencen_
en su código. Entrada relevante de preguntas frecuentes de C: c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=decl#namespaceGlobal variables: just don't use global variables. They are evil.
- a menos que esté trabajando en un proyecto integrado y tenga 1024 bytes de RAM y una CPU de 8MHz.Los "punteros de estructura" no son entidades que necesitan una cláusula de convención de nomenclatura para cubrirlos. Son justos
struct WhatEver *
. NO oculte el hecho de que hay un puntero involucrado en un typedef inteligente y "obvio". No sirve para nada, es más largo de escribir y destruye el equilibrio entre declaración y acceso.fuente
Bueno, en primer lugar, C no tiene funciones públicas / privadas / virtuales. Eso es C ++ y tiene diferentes convenciones. En C normalmente tienes:
C ++ es más complejo. He visto una verdadera mezcla aquí. Caso de camello para nombres de clase o minúsculas + guiones bajos (el caso de camello es más común en mi experiencia). Las estructuras se usan raramente (y típicamente porque una biblioteca las requiere, de lo contrario usaría clases).
fuente
external linkage
a "funciones públicas" yinternal linkage
a "funciones privadas".ALL_CAPS
a menudo también se usa para valores enum.Sabes, me gusta mantenerlo simple, pero claro ... Así que esto es lo que uso, en C:
i,n,c
etc. (solo una letra. Si una letra no está clara, conviértala en una variable local)lowerCamelCase
g_lowerCamelCase
ALL_CAPS
p_
a al prefijo. Para variables globales seríagp_var
, para variables localesp_var
, para variables constantesp_VAR
. Si se utilizan punteros lejanos, utilice un enfp_
lugar dep_
.ModuleCamelCase
(Módulo = nombre completo del módulo, o una abreviatura de 2-3 letras, pero aún enCamelCase
.)lowerCamelCase
ModuleCamelCase
ALL_CAPS
ModuleCamelCase
CamelCase
CamelCase
Escribo typedef my structs, pero uso el mismo nombre para la etiqueta y typedef. La etiqueta no está destinada a ser de uso común. En cambio, es preferible usar typedef. También reenvío la declaración typedef en el encabezado del módulo público para la encapsulación y para poder usar el nombre typedef'd en la definición.
struct
Ejemplo completo :fuente
Codificación en C #, java, C, C ++ y objetivo C al mismo tiempo, adopté una convención de nomenclatura muy simple y clara para simplificar mi vida.
En primer lugar, se basa en el poder de los IDE modernos (como eclipse, Xcode ...), con la posibilidad de obtener información rápida al pasar el mouse o presionar Ctrl ... Al aceptar eso, eliminé el uso de cualquier prefijo, sufijo y otros marcadores que simplemente proporciona el IDE.
Entonces, la convención:
parámetros, estructura y elementos de unión
Y eso es.
Da
fuente
Recomendaría no mezclar mayúsculas y minúsculas y subrayar la separación (como usted propuso para los miembros de la estructura). Esto es confuso. Podrías pensar, hey, tengo,
get_length
así que probablemente debería haberlo hechomake_subset
y luego descubres que en realidad es asímakeSubset
. Use el principio de mínimo asombro y sea consistente.Encuentro que CamelCase es útil para escribir nombres, como estructuras, typedefs y enumeraciones. Eso es todo, sin embargo. Para todo lo demás (nombres de funciones, nombres de miembros de estructura, etc.) utilizo underscore_separation.
fuente
Aquí hay uno (aparentemente) poco común, que he encontrado útil: el nombre del módulo en CamelCase, luego un guión bajo, luego la función o el nombre del alcance del archivo en CamelCase. Así por ejemplo:
fuente
Estoy confundido por una cosa: estás planeando crear una nueva convención de nomenclatura para un nuevo proyecto. En general, debe tener una convención de nomenclatura que abarque toda la empresa o el equipo. Si ya tiene proyectos que tienen alguna forma de convención de nomenclatura, no debe cambiar la convención para un nuevo proyecto. Si la convención anterior es solo la codificación de sus prácticas existentes, entonces usted es dorado. Cuanto más se diferencie de los estándares de facto existentes, más difícil será ganar mente en el nuevo estándar.
La única sugerencia que agregaría es que me ha gustado _t al final de los tipos en el estilo de uint32_t y size_t. Para mí es muy c-ish, aunque algunos podrían quejarse de que es simplemente "húngaro" inverso.
fuente
También debe pensar en el orden de las palabras para completar el nombre automático .
Una buena práctica: nombre de biblioteca + nombre de módulo + acción + tema
Si una parte no es relevante, simplemente omítala, pero siempre se debe presentar al menos un nombre de módulo y una acción.
Ejemplos:
os_task_set_prio
,list_get_size
,avg_get
OS_TASK_PRIO_MAX
fuente
Podría haber muchos, principalmente IDE dictan algunas tendencias y las convenciones de C ++ también están presionando. Para C comúnmente:
La notación húngara para los globales está bien pero no para los tipos. E incluso para nombres triviales, utilice al menos dos caracteres.
fuente
Creo que pueden ayudar para principiantes: convención de nomenclatura de variables en c
fuente