entre diferencia c++ c gcc g++

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) .

ideone da los mismos resultados ( C , C ++ ).

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 .