¿Cuál es la razón para subrayar en la definición del nombre de variable C?

Estoy tratando de entender cuándo un desarrollador necesita definir una variable C con el ‘_’ anterior. ¿Cuál es la razón para ello?

Por ejemplo:

 uint32_t __xyz_ = 0; 

Tal vez esto ayude, desde C99, 7.1.3 (“Identificadores reservados”):

  • 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.

Moraleja: para el código de usuario normal, probablemente es mejor no iniciar identificadores con un guión bajo.

(En una nota relacionada, creo que también debería _t nombrar los tipos con un _t final, que está reservado para los tipos estándar).

Es un truco utilizado en los archivos de encabezado de las implementaciones de C para los símbolos globales, a fin de evitar conflictos eventuales con otros símbolos definidos por el usuario.

Como C carece de una función de espacio de nombres, este es un enfoque rudimentario para evitar colisiones de nombres con el usuario.

No se recomienda declarar tales símbolos en su propio encabezado y en los archivos de origen, ya que puede introducir conflictos de nombres entre su código y la implementación de C. Incluso si eso no produce un conflicto en su implementación actual, todavía es propenso a conflictos extraños en implementaciones diferentes / futuras, ya que son libres de usar otros símbolos con el guión bajo.

Ya sea su C o no, el guión bajo proporciona al progtwigdor una indicación de estado para que no tenga que buscarlo. En PHP, o en cualquier lenguaje orientado a objetos en el que tratamos con decenas de miles de propiedades y métodos escritos por miles de autores, al ver un prefijo de subrayado se elimina la necesidad de explorar la clase y buscar si se declara como privado, protegido o público. eso es un ahorro de tiempo inmenso. La práctica comenzó antes de C, estoy seguro …