c++ - reservada - ¿Qué significa el guión bajo en la estructura typedef?
typedef struct c++ ejemplos (5)
Estaba leyendo el código fuente de zmq, y encontré el siguiente typedef
typedef struct {unsigned char _ [32];} zmq_msg_t;
No entiendo lo que significa el guión bajo en esta definición. ¿Podría alguien ayudar a arrojar algo de luz?
¿En una palabra? Nada. _ es un carácter como cualquier otro y se puede usar para nombrar una variable ...
Sin embargo, la mayoría de los programadores usan _ para reemplazar espacios en nombres de variables ... así que puedes hacer algo como esto:
int my_darling_little_beloved_variable;
Desde cppreference, por no tener una copia de Standard por mi parte:
Un identificador es una secuencia arbitrariamente larga de dígitos, guiones bajos, letras latinas mayúsculas y minúsculas, y la mayoría de los caracteres Unicode
Por lo tanto, _
es un nombre de variable. Ver también
¿Cuáles son las reglas sobre el uso de un guión bajo en un identificador de C ++?
como referencia sobre el uso de guiones bajos en identificadores
En varios idiomas, existe una convención para usar el identificador _
para las variables de "no importa" que se supone que nunca deben ser referenciadas. Por ejemplo, podrías escribir en Scheme / Lisp
(let* ((x ...)
(_ ...<some side effect depending on x>)
(y ...<something making use of the side effect''s result>))
...)
En este caso, no hay ningún problema con el alcance, ya que puede reasignar _
tantas veces como lo desee. En C / C ++, esta convención no es tan viable, ya que la mayoría de las veces, varios usos de _
entrarán en conflicto. No es necesario para los parámetros ignorados, ya que simplemente puede omitirlos por completo:
int fun(int a, int, int b) { return a + b; }
Sin embargo, como sustituto de tamaño único en una estructura (para la cual se usa aquí), no puede omitir el identificador, y solo necesitará un identificador por espacio de nombres. Así que en este caso, esta convención funciona. Pero como patrón idiomático, se usa en otros idiomas mucho más.
No significa nada, es simplemente el nombre del miembro de la estructura.
No es el nombre más comunicativo, pero es probable que se elija un poco "secreto".
Un identificador básicamente tiene que coincidir con [A-Za-z_][A-Za-z_0-9]*
, y este lo hace.
Un guión bajo ( _
) es un identificador válido, en este caso, un nombre del miembro de la estructura. No tiene ningún significado especial , como tal.
Citando C11
, capítulo §6.4.2.1, identificadores
Un identificador es una secuencia de caracteres no dígitos (incluidos el subrayado
_
, las letras latinas en minúsculas y mayúsculas y otros caracteres) y dígitos, que designa una o más entidades [...]
AFAIR, esto es cierto en el caso de C ++, también, consulte el capítulo 2.11, C ++ 14.