Pregunta

Estuve revisando un código C ++ de código abierto y noté una gran cantidad de puntuaciones por debajo de lo utilizado en el código, principalmente al comienzo de los nombres de variables.

return __CYGWIN__;

Solo me pregunto si hay una razón para esto, ¿o es solo el código de algunas personas? Pensaría que me cuesta leerlo.

¿Fue útil?

Solución

De Programación en C ++, Reglas y recomendaciones :

  

El uso de dos guiones bajos (`__ ') en los identificadores está reservado para el uso interno del compilador de acuerdo con el estándar ANSI-C.

     Los guiones bajos (`_ ') se usan a menudo en los nombres de las funciones de la biblioteca (como " _main " y " _exit "). Para evitar colisiones, no comience un identificador con un guión bajo.

Otros consejos

A menos que sientan que son "parte de la implementación", es decir, las bibliotecas estándar, no deberían hacerlo.

Las reglas son bastante específicas y son un poco más detalladas de lo que algunos otros han sugerido.

Todos los identificadores que contienen un subrayado doble o comienzan con un guión bajo seguido de una letra mayúscula están reservados para el uso de la implementación en todos los ámbitos, es decir, se pueden usar para macros.

Además, todos los demás identificadores que comienzan con un guión bajo (es decir, no seguido de otro guión bajo o una letra mayúscula) están reservados para la implementación en el ámbito global. Esto significa que puede usar estos identificadores en sus propios espacios de nombres o en definiciones de clase.

Esta es la razón por la que Microsoft usa nombres de funciones con un guión bajo y todo en minúsculas para muchas de sus funciones principales de la biblioteca en tiempo de ejecución que no son parte del estándar de C ++. Se garantiza que estos nombres de funciones no coincidirán con las funciones estándar de C ++ o las funciones de código de usuario.

De acuerdo con el estándar de C ++, los identificadores que comienzan con un guión bajo están reservados para las bibliotecas. Los identificadores que comienzan con dos guiones bajos están reservados para los proveedores del compilador.

Los comentarios anteriores son correctos. __Symbol__ es generalmente un token mágico proporcionado por su útil proveedor compilador (o preprocesador). Quizás los más utilizados son __FILE__ y __LINE__ , que se expanden con el preprocesador de C para indicar el nombre de archivo y el número de línea actuales. Esto es útil cuando desea registrar algún tipo de error de aserción del programa, incluida la ubicación textual del error.

Es algo que no debes hacer en el código 'normal'. Esto garantiza que los compiladores y las bibliotecas del sistema puedan definir símbolos que no coincidirán con los suyos.

Además de las bibliotecas a las que respondieron muchas otras personas, algunas personas también nombran macros o valores #define para usar con el preprocesador. Esto haría que sea más fácil trabajar con él, y es posible que haya permitido solucionar los errores en los compiladores más antiguos.

Como mencionan otros, ayuda a prevenir la colisión de nombres y ayuda a delinear entre las variables de la biblioteca y las suyas.

La respuesta más votada cita Programación en C ++: Reglas y recomendaciones :

  

" El uso de dos guiones bajos (`__ ') en los identificadores está reservado para el uso interno del compilador de acuerdo con el estándar ANSI-C. "

Sin embargo, la reclamación de esa página parece ser no encontrada

Busqué en algunos estándares de C ++ y C, y no pude encontrar ninguna mención de que los guiones bajos estén restringidos al uso interno del compilador.

C ++ (borrador de trabajo actual, consultado 2019-5- 26) estados en lex.name :

  
      
  • Cada identificador que contiene un doble guión bajo __ o comienza con un guión bajo seguido de una letra mayúscula está reservado a la implementación para cualquier uso.
  •   
  • Cada identificador que comienza con un guión bajo está reservado a la implementación para su uso como nombre en el espacio de nombres global.
  •   

TL; DR: los guiones bajos están reservados para la implementación

Aunque esta pregunta es específica de C ++, he citado secciones relevantes de los estándares C 99 y 17:

C99 sección 7.1.3

  
      
  • Todos los identificadores que comienzan con un guión bajo y una letra mayúscula u otro guión bajo están siempre reservados para cualquier uso.
  •   
  • Todos los identificadores que comienzan con un guión bajo siempre se reservan para su uso como identificadores con alcance de archivo tanto en el nombre ordinario como en el de la etiqueta   espacios.
  •   

C17 dice lo mismo que C99.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top