2013-04-12 11 views
9

Napisałem mały instrukcji printf który działa inaczej w C i C++:Czy funkcjonowanie operatora sizeof innym wc andd C++

int i; 
    printf ("%d %d %d %d %d \n", sizeof(i), sizeof('A'), sizeof(sizeof('A')), sizeof(float), sizeof(3.14)); 

Wyjście do powyższego programu w C z użyciem Kompilator gcc 4 4 8 4 8

Dane wyjściowe dla powyższego programu C++ za pomocą g ++ kompilator 4 1 8 4 8

że oczekuje 4 1 4 4 8 w C. Ale wynik nie jest taki.

Trzecim parametrem w sizeof printf (sizeof ('A')) daje 8

Może mi ktoś podać uzasadnienie dla tej

+0

vs2012: '' 4 1 4 4 8''. – gongzhitaao

Odpowiedz

14

To nie ma nic wspólnego z operatorem sizeof w szczególności; raczej rozmiar literałów znaków w C jest inny niż C++, ponieważ literały znaków w C są typu int, natomiast w C++ są typu char.

Aby uzyskać więcej informacji, zobacz Why are C character literals ints instead of chars?.

+0

Dziękuję za odpowiedź. Dlaczego sizeof (3.14) zajmuje 8 bajtów. 3.14 jest pływak w prawo. –

+5

Nie, to podwójne. 3.14f jest zmiennoprzecinkowe. – Throwback1986

2

jak wyjaśniono w Size of character ('a') in C/C++:

w C, char jest jeden bajt, ale 'a' jest stałą int, więc jest (w twoim przypadku, w zależności od architektury, na której się kompilujesz!) O szerokości czterech bajtów. w C++, zarówno char i 'a'char z jednym bajtem wielkości.

Najważniejszą wiadomością jest to, że C++ nie jest nadzbiorem C. Ma wiele drobnych zmian, takich jak ta.

+2

'int' nie musi mieć czterech bajtów. – chris

+0

@chris Dodano notatkę – Patashu

+0

Dziękuję Zadaję pytanie w oparciu o ostatni cytowany przez Ciebie cytat. C++ jest nadzbiorem C –

3

Tak, jest to konkretna implementacja. sizeof() zwraca size_t która jest liczbą całkowitą bez znaku. Jego rozmiar jest zależny od maszyny (32-bitowej lub 64-bitowej), a także od implementacji.