diferencia - ¿Por qué la salida de este programa es diferente entre C y C++?
typedef struct c++ (4)
El literal de caracteres /0
se trata como un int
en C, por lo que realmente termina imprimiendo sizeof(int)
lugar de sizeof(char)
.
Posible duplicado:
Tamaño del carácter (''a'') en C / C ++
El siguiente programa
#include <stdio.h>
int main()
{
printf("%d/n", sizeof(''/0''));
printf("%d/n", sizeof(0));
}
compilado con salidas gcc
4
4
y con g ++
1
4
¿Por qué está pasando esto? Sé que esto no es una cosa de compilación, sino una diferencia entre C y C ++, pero ¿cuál es el motivo?
En C, las constantes de caracteres tienen tipo int
por 6.4.4.4 (10) del estándar,
Una constante de caracteres enteros tiene tipo int. El valor de una constante de caracteres enteros 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 correlacionado interpretado como un entero.
Por lo tanto, está imprimiendo el tamaño de un int
dos veces.
En C ++, las constantes de caracteres tienen tipo char
.
En C, los literales de caracteres son enteros. En C ++ son caracteres.
La salida ya es dependiente del compilador ya que usa el especificador de formato incorrecto para size_t
esto sería %zu
. En los sistemas de 64 bits con size_t
más ancho que int
esto podría darle cualquier tipo de basura.
De lo contrario, esta mierda depende del compilador. Ambos valores de los que intenta imprimir son int
en C y char
e int
en C ++. Por lo tanto, en C, esto generalmente debería darle 4 4
u 8 8
y en C ++ 1 4
o 1 8
.