Identificador
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:
- objetos
- funciones
- etiquetas (estructura, unión, ó enumeración)
- miembros de estructuras o uniones
- constantes de enumeración
- nombres en typedef
- nombres en labels
- nombres en macros
- nombres en parametros de macros
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.
Contenido |
[editar] Identificadores reservados
Los siguientes identificadores están reservados y no pueden ser declarados en un programa (al hacerlo, se invoca un comportamiento indefinido):
- 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 <threads.h>
-
- nombres en typedef
- comenzando con
int
óuint
y terminando con_t
, en <stdint.h> - comenzando con
atomic_
ómemory_
seguido de una letra minúscula, en <stdatomic.h> - comenzando con
cnd_
,mtx_
,thrd_
ótss_
seguido de una letra minúscula, en <threads.h>
- comenzando con
- nombres en macros
- comenzando con
E
seguido de un dígito o de una letra mayúscula, en <errno.h> - comenzando con
FE_
seguido de una letra mayúscula, en <fenv.h> - comenzando con
INT
óUINT
y terminando con_MAX
,_MIN
, ó_C
, en <stdint.h> - comenzando con
PRI
óSCN
seguido de la letra minúscula o la letraX
, en <stdint.h> - comenzando con
LC_
seguido de una letra mayúscula, en <locale.h> - comenzando con
SIG
óSIG_
seguido de una letra mayúscula, en <signal.h> - comenzando con
TIME_
seguido de una letra mayúscula, en <time.h> - comenzando con
ATOMIC_
seguido de una letra mayúscula, en <stdatomic.h>
- comenzando con
- constantes de enumeración
- comenzando con
memory_order_
seguido de una letra minúscula, en <stdatomic.h> - comenzando con
cnd_
,mtx_
,thrd_
ótss_
seguido de una letra minúscula, en <threads.h>
- comenzando con
Todos los demás identificadores están disponibles, sin temor a colisiones inesperadas cuando se mueven programas de un compilador y biblioteca a otro.
Nota: en C++, los identificadores con doble guión bajo se reservan en todas partes; en C, sólo se reservan los que comienzan con doble guión bajo.
[editar] Límites de traducción
Aunque no hay un límite específico en la longitud de los identificadores, los primeros compiladores tenían límites en el número de caracteres iniciales significativos en los identificadores y los enlazadores impusieron límites más estrictos a los nombres con vinculación externa. C requiere que al menos los siguientes límites sean soportados por cualquier implementación que cumpla con los estándares:
|
(hasta C99) |
|
(desde C99) |
[editar] Referencias
- Standard C11 (ISO/IEC 9899:2011):
- 5.2.4.1 Translation limits (p: 25-26)
- 6.4.2 Identifiers (p: 59-60)
- 6.10.8 Predefined macro names (p: 175-176)
- 6.11.9 Predefined macro names (p: 179)
- 7.31 Future library directions (p: 455-457)
- K.3.1.2 Reserved identifiers (p: 584)
- Standard C99 (ISO/IEC 9899:1999):
- 5.2.4.1 Translation limits (p: 20-21)
- 6.4.2 Identifiers (p: 51-52)
- 6.10.8 Predefined macro names (p: 160-161)
- 6.11.9 Predefined macro names (p: 163)
- 7.26 Future library directions (p: 401-402)
- Standard C89/C90 (ISO/IEC 9899:1990):
- 2.2.4.1 Translation limits
- 3.1.2 Identifiers
- 3.8.8 Predefined macro names
[editar] Véase también
Documentación de C++ para Identificadores
|