Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

446
Vistas
¿Por qué el tamaño de un char literal no es lo mismo que el tamaño de (char)?

El programa

 #include <stdio.h> int main(void) { printf("sizeof( char ) = %zu, sizeof 'a' = %zu.\n", sizeof( char ), sizeof 'a' ); return 0; }

genera lo siguiente:

 sizeof( char ) = 1, sizeof 'a' = 4.

Estoy compilando con gcc (clang da el mismo resultado) y estas banderas:

 gcc -Wall -Wextra -Wswitch -pedantic -ansi -std=c11 -DDEBUG -ggdb3 -o

La sección 6.5.3.4 párrafo 4 de la especificación en http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf dice

4 Cuando se aplica sizeof a un operando que tiene el tipo char, char sin signo o char con signo (o una versión calificada del mismo), el resultado es 1.

Entonces, esperaría que el tamaño del operando 'a' sea 1 porque el tipo de 'a' es char, o ¿se está "promocionando" automáticamente a un int, o algo similar? (Me doy cuenta de que si lanzo 'a' a char, entonces sizeof((char)'a' ) es 1).

¿O estoy mirando el estándar equivocado?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En C, opuesto a C++, las constantes de caracteres enteros (literales) tienen el tipo int .

Entonces, el valor de la expresión sizeof( 'a' ) es igual al valor de la expresión sizeof( int ) . Mientras que sizeof( char ) siempre es igual a 1 .

Del estándar C (6.5.3.4 Los operadores sizeof y alignof)

4 Cuando se aplica sizeof a un operando que tiene el tipo char, char sin signo o char con signo (o una versión calificada del mismo), el resultado es 1...

y (6.4.4.4 Constantes de caracteres)

10 Una constante de carácter entero tiene tipo int. El valor de una constante de carácter entero que contiene un solo carácter que se asigna a un carácter de ejecución de un solo byte es el valor numérico de la representación del carácter asignado interpretado como un número entero. El valor de una constante de carácter entero que contiene más de un carácter (por ejemplo, 'ab'), o que contiene un carácter o una secuencia de escape que no se asigna a un carácter de ejecución de un solo byte, está definido por la implementación. Si una constante de carácter entero contiene un solo carácter o secuencia de escape, su valor es el que resulta cuando un objeto con tipo char cuyo valor es el del solo carácter o secuencia de escape se convierte al tipo int.

Fíjate que normalmente los objetos del tipo char usados en operaciones como operandos o en expresiones se convierten al tipo int debido a las promociones de enteros.

over 4 years ago · Santiago Trujillo Denunciar

0

Las constantes de carácter (o más exactamente, una constante de carácter entero ) tienen tipo int .

La sección 6.4.4.4p2 del estándar C describe las constantes de caracteres:

Una constante de carácter entero es una secuencia de uno o más caracteres multibyte encerrados entre comillas simples, como en 'x' . Una constante de carácter ancho es la misma, excepto que tiene como prefijo la letra L , u o U . Con algunas excepciones detalladas más adelante, los elementos de la secuencia son miembros del conjunto de caracteres de origen; se asignan de una manera definida por la implementación a los miembros del conjunto de caracteres de ejecución

Y la semántica, que incluye una descripción del tipo, se describe primero en el párrafo 10:

Una constante de carácter entero tiene tipo int . El valor de una constante de carácter entero que contiene un solo carácter que se asigna a un carácter de ejecución de un solo byte es el valor numérico de la representación del carácter asignado interpretado como un número entero. El valor de una constante de carácter entero que contiene más de un carácter (por ejemplo, 'ab'), o que contiene un carácter o una secuencia de escape que no se asigna a un carácter de ejecución de un solo byte, está definido por la implementación. Si una constante de carácter entero contiene un solo carácter o secuencia de escape, su valor es el que resulta cuando un objeto con tipo char cuyo valor es el del solo carácter o secuencia de escape se convierte al tipo int

over 4 years ago · Santiago Trujillo Denunciar

0

En lenguaje C, el character literal no es un tipo char . C considera el carácter literal como integer . Entonces, no hay diferencia entre sizeof('a') y sizeof(1) .

el tamaño del carácter literal es igual al tamaño del entero

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda