type long declaring data bool and c++ c types

long - Tamaño del carácter(''a'') en C/C++



long long c++ (4)

¿Cuál es el tamaño del carácter en C y C ++? Por lo que sé, el tamaño de char es de 1 byte tanto en C como en C ++.

Cía:

#include <stdio.h> int main() { printf("Size of char : %d/n",sizeof(char)); return 0; }

En C ++:

#include <iostream> int main() { std::cout<<"Size of char : "<<sizeof(char)<<"/n"; return 0; }

Sin sorpresas, ambos dan la salida: Size of char : 1

Ahora sabemos que los caracteres se representan como ''a'' , ''b'' , ''c'' , ''|'' , ... Así que acabo de modificar los códigos anteriores a estos:

Cía:

#include <stdio.h> int main() { char a = ''a''; printf("Size of char : %d/n",sizeof(a)); printf("Size of char : %d/n",sizeof(''a'')); return 0; }

Output:

Size of char : 1 Size of char : 4

En C ++:

#include <iostream> int main() { char a = ''a''; std::cout<<"Size of char : "<<sizeof(a)<<"/n"; std::cout<<"Size of char : "<<sizeof(''a'')<<"/n"; return 0; }

Output:

Size of char : 1 Size of char : 1

¿Por qué el sizeof(''a'') devuelve valores diferentes en C y C ++?


Como dijo Paul, es porque ''a'' es un int en C pero un char en C ++.

Cubro esa diferencia específica entre C y C ++ en algo que escribí hace unos años, en: http://david.tribble.com/text/cdiffs.htm


En C, el tipo de caracteres literales son int y char en C ++. Esto es en C ++ requerido para soportar la sobrecarga de funciones . Vea este ejemplo:

void foo(char c) { puts("char"); } void foo(int i) { puts("int"); } int main() { foo(''i''); return 0; }

Salida:

char


En C, el tipo de una constante de caracteres como ''a'' es en realidad un int , con un tamaño de 4 (o algún otro valor dependiente de la implementación). En C ++, el tipo es char , con un tamaño de 1. Esta es una de las muchas pequeñas diferencias entre los dos idiomas.


En lenguaje C , el literal de carácter no es un tipo char . C considera el carácter literal como un entero. Por lo tanto, no hay diferencia entre sizeof(''a'') y sizeof(1) .

Por lo tanto, el literal sizeof de carácter es igual a sizeof entero en C.

En el lenguaje C ++ , el literal de carácter es un tipo de char . El cppreference dice:

1) literal de caracteres estrechos o literal de caracteres ordinarios, por ejemplo, ''a'' o ''/n'' o ''/13'' . Dicho literal tiene tipo char y el valor es igual a la representación de c-char en el conjunto de caracteres de ejecución. Si c-char no se puede representar como un solo byte en el conjunto de caracteres de ejecución, el literal tiene el tipo int y el valor definido por la implementación.

Por lo tanto, en C ++ el literal es un tipo de char . por lo tanto, el tamaño del literal del carácter en C ++ es un byte.

Alos, en sus programas, ha utilizado un especificador de formato incorrecto para el operador sizeof .

C11 §7.21.6.1 (P9):

Si una especificación de conversión no es válida, el comportamiento no está definido.275) Si algún argumento no es el tipo correcto para la especificación de conversión correspondiente, el comportamiento no está definido.

Por lo tanto, debe usar el especificador de formato %zu lugar de %d , de lo contrario es un comportamiento indefinido en C.