Tipos de datos c

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Tipos de datos apoyados por el lenguaje de programación C

En el lenguaje de programación C, los tipos de datos constituyen la semántica y las características del almacenamiento de elementos de datos. Se expresan en la sintaxis del lenguaje en forma de declaraciones de ubicaciones de memoria o variables. Los tipos de datos también determinan los tipos de operaciones o métodos de procesamiento de elementos de datos.

El lenguaje C proporciona tipos aritméticos básicos, como tipos de números enteros y reales, y sintaxis para crear tipos de matrices y compuestos. Los encabezados de la biblioteca estándar C, que se utilizarán mediante directivas de inclusión, contienen definiciones de tipos de soporte que tienen propiedades adicionales, como proporcionar almacenamiento con un tamaño exacto, independientemente de la implementación del lenguaje en plataformas de hardware específicas. .

Tipos primarios

Tipos principales

El lenguaje C proporciona los cuatro especificadores de tipos aritméticos básicos char, int, float y double, y los modificadores signed, unsigned, corto y largo. La siguiente tabla enumera las combinaciones permitidas al especificar un gran conjunto de declaraciones específicas del tamaño de almacenamiento.

Tipo Explicación Tamaño mínimo (bits) Especificador de formato Rango Sufijo para constantes decimales
charUnidad de dirección más pequeña de la máquina que puede contener conjunto de caracteres básicos. Es un tipo entero. El tipo real puede ser firmado o no firmado. Contiene bits CHAR_BIT.8%c[CHAR_MIN, CHAR_MAX]
firmado porDel mismo tamaño que char, pero garantizado para ser firmado. Capable de contener al menos el [127, +127] rango.8%c[SCHAR_MIN, SCHAR_MAX]
unsigned charDel mismo tamaño que char, pero garantizado para ser no firmado. Contiene al menos el [0, 255] rango.8%c[0, UCHAR_MAX]
  • corto
  • corto
  • firmado corto
  • firmada corta entrada
Corto tipo entero firmado. Capable de contener al menos el [−32767, +32767] rango.16%hi o %hd[SHRT_MIN, SHRT_MAX]
  • corto no firmado
  • int
Corto tipo entero sin firmar. Contiene al menos el [0, 65535] rango.16%hu[0, USHRT_MAX]
  • int
  • firmado
  • int
Tipo de entero firmado básico. Capable de contener al menos el [−32767, +32767] rango.16%i o %d[INT_MIN, INT_MAX]ninguno
  • no firmado
  • int
Básico tipo entero sin firmar. Contiene al menos el [0, 65535] rango.16%u[0, UINT_MAX]u o U
  • largo
  • largas
  • firmado
  • firmada larga int
Largo tipo entero firmado. Capable de contener al menos el [−2147483647, +2147483647] rango.32%li o %ld[LONG_MIN, LONG_MAX]l o L
  • no firmado por mucho tiempo
  • int
Largo tipo entero sin firmar. Capable de contener al menos el [0, 4294967295] rango.32%lu[0, ULONG_MAX]ambos u o U y l o L
  • largo
  • largo tiempo
  • firmado largo
  • firmada largamente
Mucho tiempo. tipo entero firmado. Capable de contener al menos el [−9223372036854775807, +9223372036854775807] rango. Especificado desde la versión C99 del estándar.64%lli o %lld[LLONG_MIN, LLONG_MAX]ll o LL
  • no firmado largo
  • no firmado largo tiempo int
Mucho tiempo. tipo entero sin firmar. Contiene al menos el [0, 18446744073709551615] rango. Especificado desde la versión C99 del estándar.64%llu[0, ULLONG_MAX]ambos u o U y ll o LL
flotadorTipo real de punto flotante, generalmente conocido como un tipo de punto flotante de una sola precisión. Propiedades reales no especificadas (excepto los límites mínimos); sin embargo, en la mayoría de los sistemas, este es el formato de flotación binaria de precisión única IEEE 754 (32 bits). Este formato es requerido por el Anexo F opcional "IEC 60559 aritmética de punto flotante". Convertirse en texto:
  • %f %F
  • %g %G
  • %e %E
  • %a %A
f o F
dobleTipo real de punto flotante, generalmente conocido como un tipo de doble precisión flotante-punto. Propiedades reales no especificadas (excepto los límites mínimos); sin embargo, en la mayoría de los sistemas, este es el formato binario de doble precisión IEEE 754 (64 bits). Este formato es requerido por el Anexo F opcional "IEC 60559 aritmética de punto flotante".
  • %lf %lF
  • %lg %lG
  • %le %lE
  • %la %lA
doble largoTipo real de punto flotante, generalmente mapeado a un formato de número de punto flotante de precisión extendida. Propiedades reales no especificadas. Puede ser x86 formato de punto flotante de precisión extendida (80 bits, pero normalmente 96 bits o 128 bits en memoria con bytes de padding), el "doble-doble" no-IEEE (128 bits), IEEE 754 formato de cuádruple-precisión flotante-punto (128 bits), o el mismo que doble. Ver el artículo en doble largo para detalles. %Lf %LF
%Lg %LG
%Le %LE
%La %LA
l o L
  1. ^ a b c d e Los rangos mínimos [-2]n−1−1), 2n−1−1 (e.g. [−127,127]) provienen de las diversas representaciones de números enteros permitidas por el estándar (complemento de los huesos, señalización, complemento de dos). Sin embargo, la mayoría de las plataformas utilizan el complemento de dos, lo que implica una gama de la forma [2 - 2m−1, 2m−1−1 con mn para estas implementaciones, por ejemplo [−128,127] (SCHAR_MIN == −128 y SCHAR_MAX == 127) para un 8-bit firmado por. Desde C23, la única representación permitida es el complemento de dos, por lo tanto los valores van desde al menos [2 - 2n−1, 2n−1−1.
  2. ^ o %hhi para la producción numérica
  3. ^ o %hhu para la producción numérica
  4. ^ Estas cadenas de formato también existen para formatear al texto, pero operan en un doble.
  5. ^ a b La maleta superior difiere de la maleta inferior en la salida. Los especificadores de maleta superior producen valores en la maleta superior, y la minúscula en inferior (%A, %E, %F, %G producen valores como INF, NAN y E (exponente) en mayúsculas

El tamaño real de los tipos de números enteros varía según la implementación. El estándar solo requiere relaciones de tamaño entre los tipos de datos y tamaños mínimos para cada tipo de datos:

Los requisitos de la relación son que long long no sea menor que long, que no sea menor que int , que no es menor que short. Como el tamaño de char'es siempre el tipo de datos mínimo admitido, ningún otro tipo de datos (excepto los campos de bits) puede ser más pequeño.

El tamaño mínimo para char es de 8 bits, el tamaño mínimo para short y int es de 16 bits, para long es de 32 bits y long long debe contener al menos 64 bits.

El tipo int debe ser el tipo de entero con el que el procesador de destino trabaja de manera más eficiente. Esto permite una gran flexibilidad: por ejemplo, todos los tipos pueden ser de 64 bits. Sin embargo, son populares varios esquemas diferentes de ancho de enteros (modelos de datos). Debido a que el modelo de datos define cómo se comunican los diferentes programas, se utiliza un modelo de datos uniforme dentro de una interfaz de aplicación de sistema operativo determinada.

En la práctica, char suele tener un tamaño de 8 bits y short suele tener un tamaño de 16 bits (al igual que sus caracteres sin firmar). homólogos). Esto es válido para plataformas tan diversas como SunOS 4 Unix de la década de 1990, Microsoft MS-DOS, Linux moderno y Microchip MCC18 para microcontroladores PIC integrados de 8 bits. POSIX requiere que char tenga exactamente 8 bits de tamaño.

Varias reglas en el estándar C hacen que unsigned char sea el tipo básico utilizado para matrices adecuadas para almacenar objetos arbitrarios que no sean campos de bits: su falta de bits de relleno y representaciones de trampa, la definición de representación de objetos y posibilidad de alias.

El tamaño real y el comportamiento de los tipos de punto flotante también varían según la implementación. El único requisito es que long double no sea menor que double, que no sea menor que float . Normalmente, los formatos binarios de punto flotante IEEE 754 de 32 y 64 bits se utilizan para float y double respectivamente.

El estándar C99 incluye nuevos tipos de punto flotante real float_t y double_t, definidos en <math.h . Corresponden a los tipos utilizados para los resultados intermedios de expresiones de punto flotante cuando FLT_EVAL_METHOD es 0, 1 o 2. Estos tipos pueden ser más anchos que long double.

C99 también agregó tipos complejos: float _Complex, double _Complex, long double _Complex. C11 agregó tipos imaginarios (que fueron descritos en un anexo informativo de C99): float _Imaginary, double _Imaginary, long double _Imaginary. Incluir el encabezado <complex.h> permite acceder a todos estos tipos usando complejo y imaginario respectivamente.

Tipo booleano

C99 agregó un tipo booleano (verdadero/falso) _Bool. Además, el encabezado <stdbool.h> define bool como un alias conveniente para este tipo y también proporciona macros para true y falso. _Bool funciona de manera similar a un tipo entero normal, con una excepción: cualquier asignación a un _Bool que no sea 0 (falso) se almacena como 1 (verdadero). Este comportamiento existe para evitar desbordamientos de enteros en conversiones de restricción implícita. Por ejemplo, en el siguiente código:

no firmado char b = 256;si ()b) {}* Haz algo*}

La variable b se evalúa como falsa si unsigned char tiene un tamaño de 8 bits. Esto se debe a que el valor 256 no encaja en el tipo de datos, lo que hace que se utilicen los 8 bits inferiores, lo que da como resultado un valor cero. Sin embargo, cambiar el tipo hace que el código anterior se comporte normalmente:

¡Bool! b = 256;si ()b) {}* Haz algo*}

El tipo _Bool también garantiza que los valores verdaderos siempre se comparen iguales entre sí:

¡Bool! a = 1, b = 2;si ()a == b) {}/* este código funcionará */}

Tipos de enteros con precisión de bits

Desde C23, el lenguaje permite al programador definir números enteros que tienen un ancho de un número arbitrario de bits. Esos tipos se especifican como _BitInt(N), donde N es una expresión constante entera que denota el número de bits, incluido el bit de signo para tipos con signo, representados en complemento a dos. El valor máximo de N lo proporciona BITINT_MAXWIDTH y es al menos ULLONG_WIDTH. Por lo tanto, el tipo _BitInt(2) (o firmado _BitInt(2)) toma valores de −2 a 1 mientras que unsigned _BitInt(2) toma valores de 0 a 3. El tipo unsigned _BitInt(1) también existe, es 0 o 1 y no tiene un tipo con signo equivalente.

Tipos de diferencia de tamaño y puntero

La especificación del lenguaje C incluye typedefs size_t y ptrdiff_t para representar cantidades relacionadas con la memoria. Su tamaño se define según las capacidades aritméticas del procesador de destino, no las capacidades de memoria, como el espacio de direcciones disponible. Ambos tipos se definen en el encabezado <stddef.h> (cstddef en C++).

size_t es un tipo entero sin signo que se utiliza para representar el tamaño de cualquier objeto (incluidas las matrices) en una implementación particular. El operador sizeof produce un valor del tipo size_t. El tamaño máximo de size_t se proporciona a través de SIZE_MAX, una macro constante que se define en el encabezado <stdint.h> ( encabezado cstdint en C++). Se garantiza que size_t tendrá al menos 16 bits de ancho. Además, POSIX incluye ssize_t, que es un tipo entero con signo del mismo ancho que size_t.

ptrdiff_t es un tipo entero con signo que se utiliza para representar la diferencia entre punteros. Se garantiza que será válido sólo contra punteros del mismo tipo; La resta de punteros que constan de diferentes tipos está definida por la implementación.

Interfaz a las propiedades de los tipos básicos

La información sobre las propiedades reales, como el tamaño, de los tipos aritméticos básicos, se proporciona a través de constantes macro en dos encabezados: <limits.h> encabezado (climits encabezado en C++) define macros para tipos enteros y el encabezado <float.h> (encabezado cfloat en C++) define macros para tipos de punto flotante. Los valores reales dependen de la implementación.

Propiedades de tipos enteros

  • CHAR_BIT – tamaño del tipo de char en bits, comúnmente conocido como el tamaño de un byte (al menos 8 bits)
  • SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN(C99) – valor mínimo posible de los tipos de enteros firmados: char firmado, firmado corto, firmado, firmado largo, firmado
  • SCHAR_MAX, SHRT_MAX, INT_MAX, LONG_MAX, LLONG_MAX(C99) – valor máximo posible de tipos de enteros firmados: char firmado, firmado corto, firmado, firmado largo, firmado largo
  • UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, ULLONG_MAX(C99) – el valor máximo posible de los tipos enteros no firmados: char sin firmar, corto sin firmar, int int sin firmar, largo y largo sin firmar
  • CHAR_MIN – valor mínimo posible de char
  • CHAR_MAX – máximo valor posible de char
  • MB_LEN_MAX – número máximo de bytes en un carácter multibyte
  • BOOL_WIDTH (C23) - ancho de bits _Bool, siempre 1
  • CHAR_WIDTH (C23) - ancho de bits char; CHAR_WIDTH, UCHAR_WIDTH y SCHAR_WIDTH son iguales CHAR_BIT definiton
  • SCHAR_WIDTH, SHRT_WIDTH, INT_WIDTH, LONG_WIDTH, LLONG_WIDTH (C23) - ancho de bits signed char, short, int, long, y long long respectivamente
  • UCHAR_WIDTH, USHRT_WIDTH, UINT_WIDTH, ULONG_WIDTH, ULLONG_WIDTH (C23) - ancho de bits unsigned char, unsigned short, unsigned int, unsigned long, y unsigned long long respectivamente

Propiedades de los tipos de punto flotante

  • FLT_MIN, DBL_MIN, LDBL_MIN – valor positivo normalizado mínimo de flotador, doble, doble largo, respectivamente
  • FLT_TRUE_MIN, DBL_TRUE_MIN, LDBL_TRUE_MIN (C11) – valor mínimo positivo de flotador, doble, doble largo, respectivamente
  • FLT_MAX, DBL_MAX, LDBL_MAX – máximo valor finito de flotador, doble, doble largo, respectivamente
  • FLT_ROUNDS – modo de redondeo para operaciones de punto flotante
  • FLT_EVAL_METHOD (C99) – método de evaluación de expresiones que implican diferentes tipos de puntos flotantes
  • FLT_RADIX – radio del exponente en los tipos de punto flotante
  • FLT_DIG, DBL_DIG, LDBL_DIG – número de dígitos decimales que pueden ser representados sin perder precisión por flotador, doble, doble largo, respectivamente
  • FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON – diferencia entre 1.0 y el siguiente valor representable de flotador, doble, largo doble, respectivamente
  • FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG – número de FLT_RADIX- dígitos en el punto flotante significando para los tipos flotantes, doble, doble largo, respectivamente
  • FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP – mínimo número negativo tal que FLT_RADIX elevado a un poder uno menos que ese número es un flotador normalizado, doble, largo doble, respectivamente
  • FLT_MIN_10_EXP, DBL_MIN_10_EXP, LDBL_MIN_10_EXP – mínimo entero negativo tal que 10 elevados a esa potencia es un flotador normalizado, doble, largo doble, respectivamente
  • FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP – máximo entero positivo tal que FLT_RADIX elevado a un poder uno menos que ese número es un flotador normalizado, doble, largo doble, respectivamente
  • FLT_MAX_10_EXP, DBL_MAX_10_EXP, LDBL_MAX_10_EXP – máximo entero positivo tal que 10 elevado a ese poder es un flotador normalizado, doble, largo doble, respectivamente
  • DECIMAL_DIG (C99) – número mínimo de dígitos decimales tales que cualquier número del tipo de punto flotante más amplio soportado puede ser representado en decimal con una precisión de DECIMAL_DIG dígitos y volver a leer en el tipo original de punto flotante sin cambiar su valor. DECIMAL_DIG al menos 10.

Tipos de enteros de ancho fijo

El estándar C99 incluye definiciones de varios tipos enteros nuevos para mejorar la portabilidad de los programas. Los tipos enteros básicos ya disponibles se consideraron insuficientes, porque sus tamaños reales están definidos por la implementación y pueden variar entre diferentes sistemas. Los nuevos tipos son especialmente útiles en entornos integrados donde el hardware normalmente solo admite varios tipos y ese soporte varía entre diferentes entornos. Todos los tipos nuevos se definen en el encabezado <inttypes.h> (encabezado cinttypes en C++) y también están disponibles en <stdint.h> encabezado (encabezado cstdint en C++). Los tipos se pueden agrupar en las siguientes categorías:

  • Tipos enteros de ancho exacto que están garantizados para tener el mismo número n de bits en todas las implementaciones. Se incluye sólo si está disponible en la aplicación.
  • Tipos de entero menos ancho que están garantizados para ser el tipo más pequeño disponible en la implementación, que tiene al menos número especificado n de bits. Garantizado para ser especificado por lo menos N=8,16,32,64.
  • Tipos enteros más rápidos que están garantizados para ser el tipo entero más rápido disponible en la implementación, que tiene al menos número especificado n de bits. Garantizado para ser especificado por lo menos N=8,16,32,64.
  • Tipos enteros punteros que están garantizados para poder mantener un puntero. Se incluye sólo si está disponible en la aplicación.
  • Tipos enteros de ancho máximo que están garantizados para ser el tipo entero más grande en la implementación.

La siguiente tabla resume los tipos y la interfaz para adquirir los detalles de implementación (n se refiere al número de bits):

Tipo de categoría Tipos de firma Tipos no asignados
Tipo Valor mínimo Valor máximo Tipo Valor mínimo Valor máximo
Ancho de salida intn_tINTn_MININTn_MAXuintn_t0UINTn_MAX
Ancho mínimo int_leastn_tINT_LEASTn_MININT_LEASTn_MAXuint_leastn_t0UINT_LEASTn_MAX
Más rápido int_fastn_tINT_FASTn_MININT_FASTn_MAXuint_fastn_t0UINT_FASTn_MAX
Pointer intptr_tINTPTR_MININTPTR_MAXuintptr_t0UINTPTR_MAX
Ancho máximo intmax_tINTMAX_MININTMAX_MAXuintmax_t0UINTMAX_MAX

Especificadores de formato printf y scanf

El encabezado <inttypes.h> (cinttypes en C++) proporciona características que mejoran la funcionalidad de los tipos definidos en <stdint.h&gt ; encabezado. Define macros para los especificadores de cadenas de formato printf y scanf correspondientes a los tipos definidos en <stdint.h> y varias funciones para trabajar con intmax_t y . tipos uintmax_t. Este encabezado se agregó en C99.

Cadena de formato Printf

Las macros están en el formato PRI{fmt}{type}. Aquí {fmt} define el formato de salida y es uno de d (decimal), x (hexadecimal), o (octal), u (sin signo) y i (entero). {type} define el tipo de argumento y es uno de n, FASTn, LEASTn, PTR, MAX, donde n corresponde al número de bits del argumento.

Cadena de formato Scanf

Las macros están en el formato SCN{fmt}{type}. Aquí {fmt} define el formato de salida y es uno de d (decimal), x (hexadecimal), o (octal), u (sin signo) y i (entero). {type} define el tipo de argumento y es uno de n, FASTn, LEASTn, PTR, MAX, donde n corresponde al número de bits del argumento.

Funciones

Tipos de punto flotante adicionales

De manera similar a los tipos de enteros de ancho fijo, ISO/IEC TS 18661 especifica tipos de punto flotante para el intercambio IEEE 754 y formatos extendidos en binario y decimal:

  • _FloatN para los formatos binarios de intercambio;
  • _DecimalN para formatos de intercambio decimales;
  • _FloatNx para formatos binarios ampliados;
  • _DecimalNx para formatos decimales extendidos.

Estructuras

Las estructuras agregan el almacenamiento de múltiples elementos de datos, de tipos de datos potencialmente diferentes, en un bloque de memoria al que hace referencia una única variable. El siguiente ejemplo declara el tipo de datos struct Birthday que contiene el nombre y el cumpleaños de una persona. La definición de la estructura va seguida de una declaración de la variable John que asigna el almacenamiento necesario.

struct cumpleaños {}char Nombre[20];int día;int mes;int año;};struct cumpleaños John.;

El diseño de la memoria de una estructura es una cuestión de implementación del lenguaje para cada plataforma, con algunas restricciones. La dirección de memoria del primer miembro debe ser la misma que la dirección de la estructura misma. Las estructuras se pueden inicializar o asignar para usar literales compuestos. Una función puede devolver directamente una estructura, aunque esto no suele ser eficiente en tiempo de ejecución. Desde C99, una estructura también puede terminar con un miembro de matriz flexible.

Una estructura que contiene un puntero a una estructura de su propio tipo se usa comúnmente para construir estructuras de datos vinculados:

struct nodos {}int val;struct nodos *siguiente;};

Matrices

Para cada tipo T, excepto los tipos void y function, existen los tipos "matriz de N elementos de tipo T". Una matriz es una colección de valores, todos del mismo tipo, almacenados de forma contigua en la memoria. Una matriz de tamaño N está indexada por números enteros desde 0 hasta N−1 inclusive. Aquí hay un breve ejemplo:

int gato[10]; // array de 10 elementos, cada uno de tipo int

Las matrices pueden inicializarse con un inicializador compuesto, pero no asignarse. Las matrices se pasan a funciones pasando un puntero al primer elemento. Las matrices multidimensionales se definen como "matriz de matriz…", y todas, excepto la dimensión más externa, deben tener un tamaño constante en tiempo de compilación:

int a[10[ ]8]; // array de 10 elementos, cada uno de los tipos de 'array of 8 int elements '

Consejos

Cada tipo de datos T tiene un tipo correspondiente puntero a T. Un puntero es un tipo de datos que contiene la dirección de una ubicación de almacenamiento de una variable de un tipo particular. Se declaran con el declarador de tipo asterisco (*) después del tipo de almacenamiento básico y antes del nombre de la variable. Los espacios en blanco antes o después del asterisco son opcionales.

char *cuadrado;largo *círculo;int *oval;

También se pueden declarar punteros para tipos de datos de puntero, creando así múltiples punteros indirectos, como char ** y int ***, incluidos punteros a tipos de matrices. Estos últimos son menos comunes que una serie de punteros y su sintaxis puede resultar confusa:

char *pc[10]; // array de 10 elementos de 'puntero a char 'char ()*pa[10]; // puntero a una serie de 10 elementos de char

El elemento pc requiere diez bloques de memoria del tamaño de puntero a char (generalmente 40 u 80 bytes en plataformas comunes), pero el elemento pa es solo un puntero (tamaño 4 u 8 bytes), y los datos a los que se refiere son una matriz de diez bytes (tamaño de *pa == 10).

Sindicatos

Un tipo de unión es una construcción especial que permite el acceso al mismo bloque de memoria utilizando una selección de descripciones de tipos diferentes. Por ejemplo, se puede declarar una unión de tipos de datos para permitir leer los mismos datos ya sea como un número entero, un flotante o cualquier otro tipo declarado por el usuario:

sindicato {}int i;flotador f;struct {}no firmado int u;doble d;} s;} u;

El tamaño total de u es el tamaño de u.s, que resulta ser la suma de los tamaños de u.s.u y u.s.d – ya que s es mayor que i y f. Al asignar algo a u.i, algunas partes de u.f pueden conservarse si u.i es más pequeño que u.f.

Leer de un miembro del sindicato no es lo mismo que emitir, ya que el valor del miembro no se convierte, sino que simplemente se lee.

Punteros de función

Los punteros de función permiten hacer referencia a funciones con una firma particular. Por ejemplo, para almacenar la dirección de la función estándar abs en la variable my_int_f:

int ()*my_int_f)int) = "abdominales;// el " operador puede ser omitido, pero deja claro que el "address of" abdominales se utiliza aquí

Los punteros de función se invocan por nombre al igual que las llamadas de función normales. Los punteros de función están separados de los punteros y de los punteros nulos.

Calificadores de tipo

Los tipos antes mencionados se pueden caracterizar aún más mediante calificadores de tipo, lo que produce un tipo calificado. A partir de 2014 y C11, hay cuatro calificadores de tipo en el estándar C: const (C89), volatile (C89), restrict (C99) y _Atomic (C11): este último tiene un nombre privado para evitar conflictos con los nombres de usuario, pero se puede usar el nombre más común atomic si el <stdatomic Se incluye el encabezado .h>. De estos, const es, con diferencia, el más conocido y utilizado, aparece en la biblioteca estándar y se encuentra en cualquier uso significativo del lenguaje C, que debe satisfacer la corrección constante. Los otros calificadores se utilizan para programación de bajo nivel y, aunque se utilizan ampliamente allí, los programadores típicos rara vez los utilizan.

Contenido relacionado

Historia de la cámara

La historia de la cámara comenzó incluso antes de la introducción de la fotografía. Las cámaras evolucionaron desde la cámara oscura a través de muchas...

Tubo de vacío

Un tubo de vacío, tubo de electrones o válvula termoiónica, es un dispositivo que controla el flujo de corriente eléctrica en un alto vacío entre...

Tecnología en la Edad Antigua

Durante el crecimiento de las civilizaciones antiguas, la tecnología antigua fue el resultado de los avances en ingeniería en la antigüedad. Estos avances...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save