Espacios de nombres
Variantes

Identificador

De cppreference.com

Un identificador es una secuencia arbitrariamente larga de dígitos, guiones bajos, letras latinas minúsculas y mayúsculas , y caracteres Unicode especificados usando notación de escape \u y \U (desde C99). Un identificador válido debe comenzar con un carácter que no sea un dígito (letra latina, guión bajo o carácter Unicode que no sea un dígito (desde C99). Los identificadores distinguen entre mayúsculas y minúsculas (las minúsculas y las mayúsculas son distintas).

Se define como implementación si se permiten caracteres Unicode en bruto (no escapados) en los identificadores:

char *\U0001f431 = "gato"; // soportado
char *🐱 = "gato"; // implementacion definida (ej. funciona en clang pero no en gcc)
(desde C99)

Los identificadores pueden denotar los siguientes tipos de entidades:

Cada identificador que no sea el nombre de macro o el nombre de parámetro de macro tiene un campo de aplicación, pertenece a un espacio de nombres, y puede tener vinculación. El mismo identificador puede denotar diferentes entidades en diferentes puntos del programa, o puede denotar diferentes entidades en el mismo punto si las entidades están en diferentes espacios de nombre.


Identificadores reservados

Los siguientes identificadores están reservados y no pueden ser declarados en un programa (al hacerlo, se invoca un comportamiento indefinido):

1) Los identificadores que son palabras clave no pueden utilizarse para otros fines. En particular #define o #undef de un identificador que es idéntico a una palabra clave no está permitido.
2) Todos los identificadores externos que comienzan con un guión bajo.
3) Todos los identificadores que comienzan con un guión bajo seguido de una letra mayúscula o de otro guión bajo (estos identificadores reservados permiten a la biblioteca utilizar numerosas macros y funciones no externas detras de escena).
4) Todos los identificadores externos definidos por la biblioteca estándar (en un entorno alojado). Esto significa que no se permite que ningún nombre externo suministrado por el usuario coincida con ningún nombre de biblioteca, ni siquiera si se declara una función idéntica a una función de biblioteca.
5) Identificadores declarados como reservados para uso futuro por la biblioteca estándar, es decir
  • nombres en funciónes
  • cerf, cerfc, cexp2, cexpm1, clog10, clog1p, clog2, clgamma, ctgamma y sus variantes con sufijo -f y -l en <complex.h>
  • comenzando con is ó to seguido de una letra minúscula, en <ctype.h> y <wctype.h>
  • comenzando con str seguido de una letra minúscula, en <stdlib.h>
  • comenzando con str, mem ó wcs seguido de una letra minúscula, en <string.h>
  • comenzando con wcs seguido de una letra minúscula, en <wchar.h>
  • comenzando con atomic_ seguido de una letra minúscula, en <stdatomic.h>
  • comenzando con cnd_, mtx_, thrd_ ó tss_ seguido de una letra minúscula, en