Uso del subrayado doble en C

Estaba estudiando la C programming a modern approach libro de C programming a modern approach . Encontré una pregunta en ella:

¿Por qué no es una buena idea que un identificador contenga más de un carácter de subrayado adyacente (como en el actual__balance, por ejemplo)?

¿Alguien puede explicarme por qué es así?

Los identificadores que comienzan con dos guiones bajos o un guión bajo y una letra mayúscula están reservados por el estándar C y no deben usarse en su propio código, cf. ISO 9899: 2011 §7.1.3 ¶1 # 1:

7.1.3 Identificadores reservados

1 Cada encabezado declara o define todos los identificadores enumerados en su subcláusula asociada, y opcionalmente declara o define identificadores enumerados en sus subcláusulas de direcciones de bibliotecas futuras asociadas y los identificadores que siempre están reservados para cualquier uso o para uso como identificadores de scope de archivo.

  • Todos los identificadores que comienzan con un guión bajo y una letra mayúscula u otro guión bajo siempre se reservan para cualquier uso.
  • Todos los identificadores que comienzan con un guión bajo siempre se reservan para su uso como identificadores con scope de archivo en los espacios de nombre ordinario y de etiqueta.
  • Cada nombre de macro en cualquiera de las siguientes subcláusulas (incluidas las direcciones futuras de la biblioteca) se reserva para su uso como se especifica si se incluye alguno de sus encabezados asociados; a menos que se indique explícitamente lo contrario (véase 7.1.4).
  • Todos los identificadores con enlace externo en cualquiera de las siguientes subcláusulas (incluidas las direcciones futuras de la biblioteca) y errno están siempre reservados para su uso como identificadores con enlace externo. 184)
  • Cada identificador con el scope del archivo listado en cualquiera de las siguientes subcláusulas (incluidas las direcciones futuras de la biblioteca) se reserva para su uso como nombre de macro y como identificador con el scope del archivo en el mismo espacio de nombre si se incluye alguno de sus encabezados asociados.

2 No hay otros identificadores reservados. Si el progtwig declara o define un identificador en un contexto en el que está reservado (aparte de lo permitido por 7.1.4), o define un identificador reservado como un nombre de macro, el comportamiento no está definido.

3 Si el progtwig elimina (con #undef ) cualquier definición de macro de un identificador en el primer grupo mencionado anteriormente, el comportamiento no está definido.


184) La lista de identificadores reservados con enlace externo incluye math_errhandling , setjm , va_copy y va_end .

Para los guiones bajos dentro de los nombres: estos son difíciles de diferenciarlos de los guiones bajos en muchos tipos de letra y generan confusión. Te recomiendo que evites hacer eso.

Porque es difícil saber si hay uno o dos guiones bajos, por lo que es probable que escribas current_balance cuando te refieres a current__balance.

En un tema similar, intente no mezclar los números 0 y 1 con las letras o y l, y no cree variables que solo difieran en mayúsculas, por ejemplo:

 bool boo1; bool b00l; int i_byte; int i_Byte;