Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

445
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda