2009-11-14 16 views
25

Me pregunto si la convención de nomenclatura utilizada en las bibliotecas estándar C/C++ tiene un nombre, o al menos una hoja de trucos donde puedo buscar las reglas. P.ej.Nombre de la convención de nomenclatura stdlib de C/C++?

push_back -- underscore used 
setstate  -- but not used here! 
string::npos -- when to use abbreviations? 
fprintf 
... 

¿La convención de nomenclatura utilizada en las bibliotecas estándar de C/C++ tiene un nombre específico?

+9

Además, la extraña letra mayúscula de 'std :: ios_base :: Init' o_O –

+0

¿Qué? mayúsculas también se usan! : P – AraK

+41

Se llama "Cualquier mierda que ocurra esta semana". –

Respuesta

3

La triste realidad es que no hay una convención real.

Vea el orden de los argumentos de las funciones de stdio como un recordatorio doloroso.

+2

Hay una buena razón para esos, en realidad. Con la función C tradicional, llame a ABI, llamando a funciones múltiples con el mismo último argumento (es decir, 'para (i = 0; i ephemient

0

No tengo la respuesta, pero al menos, no creo que C y C++ utilicen la misma convención de nomenclatura.

+0

¿Podría explicar más? – AraK

+0

Cosas como fprintf, strlen, itoa (estremecimiento) provienen de las bibliotecas C. Aquellos tienen la convención de minúsculas, sin guiones bajos y abreviados pesados. Las bibliotecas C son las que comienzan con "c" en C++: cstdio, cstring, cmath, etc. – UncleBens

+0

Cómo 'C' tiene un nombre' strpbrk' y 'C++' tiene un nombre 'sync_with_stdio', y no' swstdio' :) –

24

C/C++ utiliza la famosa convención de nombres make-stuff-up-as-we-go-along. En general, las únicas cosas consistentes que puede decir sobre la convención de nomenclatura de la biblioteca estándar C/C++ es que no utiliza camel case (excepto nombres de tipos de plantilla STL de C++), utiliza nombres de clase y función en minúsculas y (a veces) usa guiones bajos para separar las palabras. Pero el uso de caracteres de subrayado es más una cuestión de C++; C, en particular, tiende a abreviar palabras, p. strlen, memcpy. Esto es probablemente el resultado de la tendencia a usar nombres muy escuetos para las cosas en los primeros días de UNIX.

+17

"tendencia a usar nombres muy escuetos para cosas" que se debe a terminales de 80 caracteres o menores; límites de recursos en compiladores; un deseo innato de Huffman de codificar el universo; O todo lo anterior. –

+19

Los compiladores de Pre-ansi solo consideraban que los primeros 6 caracteres de un símbolo eran sobresalientes para ser compatibles con Fortran, IIRC, por lo que los símbolos 'strlen',' strlenxyz' y 'strlenohmygodwhathaveidone' se referían a la misma cosa. Por lo tanto, para compatibilidad con los compiladores anteriores a ANSI, el estándar ANSI C se aseguró de que los primeros 6 caracteres de todos los símbolos de biblioteca estándar fueran únicos entre sí. –

6

Creo que hay varios grupos inventados en diferentes momentos por diferentes personas y que utilizan convenciones algo diferentes: bibliotecas C, secuencias, cadenas, STL (contenedores + algoritmos + iteradores). Tengo la sensación de que este último podría verse como la convención, que establece el ejemplo de cosas como impulsar y nombrar C++ 0x.

8

La biblioteca estándar C tiene well defined rules que debe seguir para evitar los conflictos de nombres. Aunque no sé nada de C++.

Si usted piensa que esto es un lío que debe salir de la librería PHP ...

+0

+1 para el enlace. Se reservan más nombres de los que cree, por ejemplo, tipos que terminan en '_t'. – u0b34a0f6ae

+0

@kaizer: afaik reservando '_t' es una restricción POSIX – Christoph

+0

Sí. C solo reserva aquellos que comienzan con 'uint' o' int' y terminan con '_t'. –

0

No creo que hay un nombre para cualquier conjunto de convenciones de nombres.

Las convenciones de nomenclatura en los estándares C y C++ son diferentes, aunque débilmente relacionadas.

En particular, en la biblioteca C, ninguna función o nombre de macro contiene un guión bajo (AFAICR), a diferencia de la biblioteca C++.

La mayor parte de la convención de nomenclatura de la biblioteca C se controló por el precedente; estandarizó la práctica existente (aproximadamente a partir de 1984), con notablemente pocos inventos (el manejo de la configuración regional a través de <locale.h> fue el principal).

La biblioteca de C++ se basó también en precedentes, pero un conjunto diferente de precedentes, y creo que es discutible que el STL no estaba en uso generalizado antes de su adopción por el estándar ya que las funciones en la biblioteca C .

Cuestiones relacionadas