Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

447
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!