Estaba echando un vistazo a un código C ++ de código abierto y noté que se usaban muchas puntuaciones dobles en el código, principalmente al comienzo de los nombres de las variables.
return __CYGWIN__;
Solo me pregunto si hay una razón para esto, o es solo algunos estilos de código de personas. Pensaría que dificulta la lectura.
c++
double-underscore
Nathan W
fuente
fuente
#define FOO 1
pero no deben hacerlo#define __FOO__ 1
y, por lo tanto, la implementación es libre de usar el nombre__FOO__
para sus propias macros, variables, funciones, etc.Respuestas:
De Programación en C ++, Reglas y Recomendaciones :
fuente
namespace
se presentara._main
.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 un poco más detalladas de lo que otros han sugerido.
Todos los identificadores que contienen un guión bajo 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, pueden usarse para macros.
Además, todos los demás identificadores que comienzan con un guión bajo (es decir, no seguidos por 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 clases.
Esta es la razón por la que Microsoft usa nombres de funciones con un subrayado inicial y todo en minúsculas para muchas de sus funciones de biblioteca de tiempo de ejecución principales que no forman parte del estándar C ++. Se garantiza que estos nombres de funciones no chocarán con las funciones estándar de C ++ ni con las funciones de código de usuario.
fuente
De acuerdo con el estándar C ++, los identificadores que comienzan con un guión bajo están reservados para bibliotecas. Los identificadores que comienzan con dos guiones bajos están reservados para los proveedores de compiladores.
fuente
Los comentarios anteriores son correctos.
__Symbol__
es generalmente un token mágico proporcionado por su útil proveedor de compiladores (o preprocesadores). Quizás los más utilizados son__FILE__
y__LINE__
, que el preprocesador C amplía para indicar el nombre de archivo actual y el número de línea. Eso es útil cuando desea registrar algún tipo de error de afirmación del programa, incluida la ubicación textual del error.fuente
Es algo que no debes hacer en el código "normal". Esto asegura que los compiladores y las bibliotecas del sistema puedan definir símbolos que no colisionen con los suyos.
fuente
Los guiones bajos dobles están reservados para la implementación
La respuesta más votada cita Programación en C ++: Reglas y recomendaciones :
Sin embargo, después de leer algunos estándares de C ++ y C, no pude encontrar ninguna mención de que los guiones bajos estuvieran restringidos solo al uso interno del compilador. Los estándares son más generales, reservando doble subrayado para la implementación .
C ++
C ++ (borrador de trabajo actual, consultado el 26 de mayo de 2019) establece en
lex.name
:C
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
C17 dice lo mismo que C99.
¿Qué es la implementación ?
Para C / C ++, la implementación se refiere libremente a los recursos establecidos necesarios para producir un ejecutable a partir de los archivos fuente del usuario. Esto incluye:
Implementaciones de ejemplo
Hay varias implementaciones diferentes de C ++ mencionadas en Wikipedia . (sin vínculo de ancla, ctrl + f "implementación")
Aquí hay un ejemplo de la implementación de C / C ++ de Digital Mars que reserva algunas palabras clave para una característica de ellos.
fuente
Además de las bibliotecas sobre las que respondieron muchas otras personas, algunas personas también nombran macros o valores #define para usar con el preprocesador. Esto facilitaría el trabajo y podría haber permitido solucionar errores en compiladores más antiguos.
Como otros mencionaron, ayuda a prevenir la colisión de nombres y ayuda a delinear entre las variables de la biblioteca y las suyas.
fuente