C'nin bir sürü revizyon ve sürümü var. Ayrıca Linux ve Windows ortamlarında ve 32 ve 64 bit işletim sistemlerinde farklı derleyiciler kullanılabilir, aynı işlevler farklı sonuçlar verebilir. Ayrıca C ve C++'ın davranışlarının farklılık gösterdiği yerler var. Bu liste çok uzun.
Verdiğiniz örnekte hangi dil, ortam, derleyici, mimari, standart kullanılmış belli değil. Dolayısıyla pek çok farklı durumla karşılaşabilirsiniz.
İnternette bakarsanız çoğu bilgi ve örnekler Linux'a göredir. Bunlar az bilgi etmiyor.
Dolayısıyla kullandığınız ortama göre, kullandığınız özelliğin dokümanını okumanızı tavsiye ederim.
Hepsini de bilmek zorunda değiliz. Başlangıçta sadece neden olduğunu bilsek yeter, dili öğrendikten sonra gerekli olan şeyleri gerektiği zaman (örneğin Windows için yadığımız programı Linux'da çalıştıracağımız zaman) öğreniriz.
sizeof(char) neden böyle bir sonuç vermiş karşılaşmadığım bilmediğim bir şey. Ancak biraz arayınca bulunabilir veya kodda bizim görmediğimiz bir yer olabilir zira her şey renklendirilmiş, tanımlamalar renkli gösterilmiyor.
Kodların resmini koymak yerine kendisini yazarsanız sitenin sistemi açısından da çok daha iyi olur.
Sedece uyarı mesajlarının sebebini söyleyim (orda yazıyor zaten).
Mesajda diyor ki; %d format belirteci bir tamsayı parametre beklenir ama ikinci parametrenin türü (yani sizeof ile dönen değerin türü) bir long unsigned int değeridir.
Yani yanlış belirteç kullanıyorsunuz. Linuxta deneme imkanım yok. Altta Windows üzerinde 64 bit tamsayı yerine geçen stdint.h içinde tanımlanmış int64_t (benim örneğimdeki sizeof'un döndürdüğü) nasıl formatlayacağınız ile ilgili bir örnek var.
#include <stdio.h>
#include <stdint.h>
int main() {
unsigned long long int a;
float b;
short c;
char d;
int64_t u;
printf("%I64d \n", sizeof(a)); // Linux %lld
printf("%I64d \n", sizeof(b));
printf("%I64d \n", sizeof(c));
printf("%I64d \n", sizeof(d));
printf("char boyutu = %d\n", (sizeof(d)));
printf("%I64d \n", sizeof(u));
return 0;
}
Çıktısı:
8
4
2
1
char boyutu = 1
8