" Çözülemeyecek Hiçbir Problem Yoktur! "

Diller ve Örnek Kodlar



   Linkler

Öner Yazılım & Eğitim
Programlama ipuclarI
C ve Sistem Programcılar Derneği
CsdOs İşletim Sistemi Projesi
Daynex Bilişim Center
Pc Bileşenleri
TapaTipo Komik Oyunlar
Ucretsiz Bilgisayar Dersleri
Online Tutor Services

A'dan Z'ye C
KAAN ASLAN
Backpack: Get Organized and Collaborate 
 
 
 
 

 






   Save Your Kisses For Me
  Fiat Reklam Müzigi  





Programlama
Kitaplarını Piyasadan
Çok Daha Ucuza Bulabilirsiniz.




 


C Örnek Kod Arşivi  

C Püf Noktaları

C Programlama Dili

C dili, programlama dünyasının en çok kullanılan dilidir.

void function1(void);
void funciton2();

int main()
{

char ch = 'a';
function1();
function2(33, ch);
return 0;

}
void function1(void)
{
   printf("In function1\n");
}

void function2()
{
  printf("In function2\n");
}

void function1(void);
void function2();

fonksiyon prototipleri arasındaki fark nedir?
Parametresi void olarak belirlenmiş bir fonksiyon, C dili standartlarına göre hiçbir parametre almaz.

Parametre parantezlerine hiçbir değer girilmemiş fonksiyon ise, parametre kontrolünün yapılmayacağı anlamına gelir. Yani bu fonksiyon çağrılırken istenilen türde ve sayıda parametre alabilir. Tür ve parametre sayı kontrolü yapılmaz..

int main()
{

int a=1;
switch(a)
{
  int b=20;
  case 1:
     printf("b is %d\n",b);
     break;
   default:
     printf("b is %d\n",b);
     break;
}
return 0;

}

Bu kodda ise, ekrana " b is 20" yazılmasını bekleyeceksiniz. Ancak 20 yerine çok tuhaf bir sayı gelecektir. Neden?

switch bloğu içinde yeni bir değişken tanımlanıp ilk değer verilmiştir. Bu tamamen hatalı bir durumdur. switch bloğunun dışında tanımlanıp yine switch bloğu içerisinde değer atanırsa yine ekrana istenilen değer yazılmayacaktır.

Yapılması gereken, int b = 20; ifadesi switch bloğunun dışında bildirilmelidir.

#define SIZE 10

void size(int arr[SIZE])
{
   printf("size of array is:%d\n", sizeof(arr));
}

int main()
{
  int arr[SIZE];
  size(arr);
  return 0;
}

Burada ise yapılmak istenen arr dizisinin kaç bitlik boyut kapladığını bulmaktır. Beklenen cevap integer türünün 4 bit olarak tutulduğu sistemlerde 40'tır. Ancak bu soruda cevap 4 olacaktır.

Sebep? size() fonksiyonuna parametre olarak geçirilen arr, sadece bir göstericidir. Yani bu fonksiyon o göstericinin boyutunu hesaplar. Ekrana çıkan 4 sonucu, bir integer sabiti gösteren göstericinin boyutudur.

int main()
{

char c;
scanf("%c",&c);
printf("%c\n",c);

scanf(" %c",&c);
printf("%c\n",c);

system("pause");
return 0;

}

İlk scanf fonksiyonunun kullanımı ile ikinci scanf fonksiyonunun kullanımı arasındaki farkı görebildiniz mi? 1. kullanım doğru iken, 2.sinde küçük bir bug var. Yani scanf(" %c", &c) ifadesinde, % karakterinden önce bir boşluk bırakılmış. Bu boşluğun scanf tarafından yorumlanışı bizim istemediğimiz bir şekilde olacaktır. Yani bir karakter girdiğimizde onu alıp işlemeyecektir (boşluk yüzünden).

Sonuç olarak, printf fonksiyonunda parametreler arasna istediğimiz kadar boşluk koyabiliriz. Bu boşluklar, değerlerin ekrana yazılmasında rol alır. Ancak scanf fonksiyonunda yanlışlıkla kullanılacak bir boşluk, girilen değerlerin sırasını alt-üst edecektir.

int main()
{

int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n", sizeof(i++));
printf("i : %d\n",i);
return 0;

}

Burada ise sizeof(i++) ifadesi ile i değerinin bir artarak ikinci printf fonksiyonunda ekrana 11 değerinin yazılması beklenir. Ancak sizeof(i++), sizeof(++i) ve sizeof(i) aynı şekilde çalışır. Yani ++ operatörünün yan etkisi çalışmaz.

#define PrintInt(expr) printf("%s : %d\n", #expr,(expr))
int main()
{

int y = 100;
int *p;
p = (int*)malloc(sizeof(int));
*p = 10;
y = y/*p; /*dividing y by *p */;
PrintInt(y);
return 0;

}

Ekrana 10 yazılmasını beklerken 100 yazılıyor. Kodu dikkatlice incelerseniz, y = y/*p ifadesinde bir tuhaflık olduğunu göreceksiniz. Bu kodun bulunduğu satıra yazılan yorum sayesinde, *p değişkeni gözden kaçırılıyor. Yani yorum satırı y'den sonraki /* karakterleriyle başlıyor. Ve istenilen sonuç yerine y = y ifadesinin sonucu yazılıyor. Gösterici işaretinin ve yorum satırlarının kullanımına dikkat etmek gerek. Burada, / atomundan sonra bir boşluk verilerek bug düzeltilir.

y = y / *p;

   

 

Domain Sorgulama Ekranı