C'de öğrenilecek çok az söz dizimi vardır - yaklaşık 32 anahtar kelime ve bir avuç noktalama kuralı. Yazacağınız hemen her programın dış biçimi aynıdır, o yüzden bu biçimi bir kez ve dikkatle parçalarına ayırmaya değer.
En Küçük Tam Program
Bu derlenir, çalışır ve hiçbir şey yapmaz:
Include yok, çıktı yok, kalıp bir sınıf ya da modül yok. main giriş noktasıdır: işletim sistemi programınızı başlattığında main'i çağırır. main döndüğünde program biter ve döndürdüğü değer çıkış durumudur.
Çıktı ekleyin, bir include'a ihtiyacınız olur:
Ön İşlemci Yönergeleri
# ile başlayan satırlar, asıl derlemeden önce ön işlemci tarafından işlenir. Bunlar C deyimi değildir ve noktalı virgül almazlar.
#include <stdio.h> /* standart kütüphane başlığı - açılı parantez */
#include "myutils.h" /* kendi başlığınız - tırnak, önce yerelde aranır */
#define MAX 100 /* bir makro - aşağıda MAX her yerde 100 ile değişir */
#include harfi harfine bir metin yapıştırmasıdır: adı verilen dosyanın tüm içeriği o noktaya bırakılır. stdio.h, printf'in bildirimini içerir; derleyicinin printf'in hangi argümanları aldığını böyle bilir. Include'u atlarsanız implicit declaration of function 'printf' hatası alırsınız.
Açılı parantez ile tırnak arasındaki ayrım, derleyicinin nerede arayacağıyla ilgilidir: <...> sistem include dizinleri, "..." ise önce bu dosyanın yanına bak demektir.
main Fonksiyonu
int main(void) {
return 0;
}
Her biri anlamlı dört parça:
int- main'in dönüş tipi. Değer, işletim sistemine çıkış durumu olarak gider; orada 0 başarı demektir.main- çalışma zamanının çağırdığı ayrılmış isim. Her barındırılan C programında tam olarak bir tane vardır.(void)- parametre listesi. Buradakivoid"argüman almaz" demektir. Bunun yerinemain()yazmak geçerlidir ama daha zayıftır: C'de boş parantezler "belirtilmemiş parametreler" anlamına gelir ve argüman denetimini kapatır.{ ... }- fonksiyon gövdesi.
Diğer standart biçim komut satırı argümanlarını alır:
int main(int argc, char *argv[]) { ... }
Onlara ihtiyacınız olana dek int main(void) kullanın.
Deyimler ve Noktalı Virgüller
Bir deyim tek bir talimattır ve noktalı virgülle biter.
Dört deyim, dört noktalı virgül. Noktalı virgül bir ayırıcı değil, bir sonlandırıcıdır - bloktaki son deyimin de bir tane alması gerekir.
Noktalı virgül almayanlar:
#include <stdio.h> /* ön işlemci satırı - noktalı virgül yok */
int add(int a, int b) { /* fonksiyon tanım başlığı - noktalı virgül yok */
return a + b;
} /* fonksiyonun kapanış parantezi - noktalı virgül yok */
if (x > 0) {
...
} /* denetim bloğunun kapanış parantezi - noktalı virgül yok */
Herkesi yakalayan tek durum, gövde olması gereken yerdeki bir noktalı virgüldür:
if (score > 90); /* HATA: bu ; tüm if gövdesidir */
printf("Mükemmel!\n"); /* score ne olursa olsun her zaman çalışır */
Bu tamamen geçerli C'dir. if boş bir deyimi denetler ve printf sıradaki bir sonraki satırdır. -Wall bunun için uyarır; derleyici sizi durdurmaz.
Bloklar ve Süslü Parantezler
Süslü parantezler deyimleri bir blok hâlinde gruplar; bir blok, bir deyim beklenen her yerde tek deyim sayılır.
Gövde tek deyimken süslü parantezler isteğe bağlıdır, ama onları atlamak meşhur hataların doğduğu yerdir - sonradan ikinci bir satır eklersiniz ve o satır sessizce if'in dışında kalır. Her zaman süslü parantez kullanın.
Bloklar aynı zamanda kapsam oluşturur: { ... } içinde bildirilen bir değişken kapanış parantezinde var olmayı bırakır.
Büyük-Küçük Harf Duyarlılığı ve Boşluklar
C her yerde büyük-küçük harfe duyarlıdır. total, Total ve TOTAL üç ayrı isimdir. Her anahtar kelime küçük harflidir, dolayısıyla Int, Return ve Printf hepsi hatadır - ve Printf için gelen hata mesajı kafa karıştırıcıdır, çünkü derleyici hiç duymadığı bir fonksiyonu kastettiğinizi varsayar.
Buna karşılık boşluk neredeyse tamamen serbesttir. Derleyici, art arda gelen boşlukları, sekmeleri ve satır sonlarını tek bir ayırıcı olarak görür. Bu geçerlidir:
int main ( void )
{
printf
( "Merhaba\n" ) ;
return 0 ;
}
Bu da öyle:
int main(void){printf("Merhaba\n");return 0;}
İkisi de aynı şekilde derlenir. Derleyici umursamadığına göre biçimlendirme tamamen insanlar içindir - ve alışıldık düzeni (satır başına bir deyim, iç içelik seviyesi başına dört boşluk ya da bir sekme, açılış parantezi aynı satırda) izlemeye değer, çünkü okuyacağınız her C kod tabanı buna yakın bir şey kullanacaktır.
Boşluğun önemli olduğu iki yer: bir anahtar kelimeyi ya da tanımlayıcıyı bölemezsiniz (in t, int değildir) ve normal bir metin sabitinin içine satır sonu koyamazsınız.
Tanımlayıcılar: Adlandırma Kuralları
Tanımlayıcı, seçtiğiniz herhangi bir isimdir - değişkenler, fonksiyonlar, türler. Kurallar:
- Harflerden, rakamlardan ve alt çizgilerden oluşur.
- Rakamla başlamaz.
total2uygundur,2totaldeğildir. - Anahtar kelime olamaz:
int,forya dareturnadında bir değişken olmaz. - Büyük-küçük harf önemlidir.
- Alt çizgiyle başlayan isimler ve art arda iki alt çizgi içeren her şey gerçekleştirime ayrılmıştır - bunları uydurmayın.
int score; /* iyi */
int total_items; /* iyi - snake_case C geleneğidir */
int _hidden; /* geçerli ama ayrılmış - kaçının */
int 2fast; /* hata */
int float; /* hata - anahtar kelime */
Baştan Sona Açıklamalı Bir Program
Yukarıdaki her şey, tek yerde:
Burada okuma sırası önemlidir: with_tax, main onu kullanmadan önce tanımlanmıştır. C dosyayı yukarıdan aşağı okur, dolayısıyla bir fonksiyon çağrılmadan önce bildirilmiş olmalıdır. Onu daha erken tanımlayın ya da en tepeye bir fonksiyon prototipi yazıp daha sonra tanımlayın.
Sıkça Sorulan Sorular
Bir C programının temel yapısı nedir?
Önce ön işlemci yönergeleri (#include <stdio.h>), sonra fonksiyon tanımları; bunlardan biri main olmak zorundadır. Bir fonksiyonun içinde deyimler noktalı virgülle biter ve bloklar süslü parantezlere sarılır. En küçük program #include <stdio.h> artı int main(void) { return 0; }'dır.
Neden sadece main() değil de int main(void)?
int, main'in dönüş tipidir - programın işletim sistemine geri verdiği çıkış durumu. (void), main'in hiç argüman almadığını açıkça söyler. Boş parantezlerle main() yazmak, derleyiciye parametreler hakkında hiçbir şey söylemeyen eski bir tarzdır, dolayısıyla daha az denetim yapar.
Tüm C deyimleri noktalı virgül ister mi?
Her deyim ister, ama her satır istemez. Ön işlemci yönergeleri (#include, #define), fonksiyon tanımları ve bir bloğun ya da if/for/while'ın kapanış parantezi noktalı virgül almaz. if (x)'ten sonraki başıboş bir noktalı virgül geçerli C'dir ve gövdeyi sessizce koşulsuz çalıştırır.
C büyük-küçük harfe duyarlı mı?
Evet, tamamen. count, Count ve COUNT üç farklı tanımlayıcıdır ve Int, int anahtar kelimesi değildir. C'nin her anahtar kelimesi küçük harflidir, dolayısıyla Return ya da Printf içindeki bir büyük harf hata üretir.