C dili temelleri
İşletim sistemlerinin ve birçok güvenlik aracının dili olan C’yi sıfırdan öğrenir, derleyiciyle çalışmayı ve uyarıları okumayı kavrarsın.
Seviye 101 · 21 ders · 21 pratik lab
Dersler
Başlarken
- gcc ile ilk program: derleme ve çalıştırma: gcc ile C kaynak dosyasını derler, çalıştırır ve main işlevinin dönüş değerinin ne anlama geldiğini öğrenirsin.
- Derleme aşamaları: önişlemci, derleyici, bağlayıcı: Kaynak kodun çalıştırılabilir dosyaya hangi adımlarla dönüştüğünü gcc ara çıktılarıyla izlersin.
- Değişkenler, türler ve sizeof: int, char, float ve double türlerini tanır, her birinin bellekte kapladığı yeri sizeof ile ölçersin.
- İşleçler ve bit düzeyi işlemler: Aritmetik ve mantıksal işleçlerin yanında AND, OR, XOR ve kaydırma gibi bit işlemlerini kullanırsın.
- printf ve scanf ile giriş-çıkış: Biçim belirteçleriyle çıktı üretir, girdi okurken sınır koymanın neden gerektiğini görürsün.
- Kısa görev: birim dönüştürücü
Akış denetimi ve işlevler
- Koşullar: if, else ve switch: Karar yapılarını yazar, C’de sıfırın yanlış, diğer her şeyin doğru sayıldığını bilirsin.
- Döngüler: for, while, do-while: Tekrarlayan işleri uygun döngüyle yazar ve bir eksik hatalarından (off-by-one) kaçınırsın.
- İşlevler: parametre, dönüş ve prototip: Kodu işlevlere böler, prototiple bildirir ve değerin kopyalanarak geçtiğini görürsün.
- Kapsam ve depolama türleri: yerel, global, static: Değişkenin nerede yaşadığını ve ne kadar süre kaldığını belirlemek için static ve extern’i kullanırsın.
- Diziler ve çok boyutlu diziler: Dizi tanımlar, dolaşır ve C’nin sınır denetimi yapmadığını, taşmanın sessizce bozulmaya yol açtığını anlarsın.
- C dizgileri: char dizisi ve sonlandırıcı karakter: Metnin sonunda \0 bulunduğunu, string.h işlevlerinin bunu nasıl kullandığını ve hangi hataların doğduğunu öğrenirsin.
- Kısa görev: not çizelgesi
Yapılar, dosyalar ve hatalar
- struct, enum ve typedef: İlişkili verileri struct ile toplar, sabit seçenekleri enum ile adlandırır, typedef ile okunurluğu artırırsın.
- Başlık dosyaları ve çok dosyalı proje: Kodu .c ve .h dosyalarına böler, include guard kullanır ve dosyaları ayrı ayrı derleyip bağlarsın.
- make ve Makefile ile derleme otomasyonu: Hedefleri ve bağımlılıkları Makefile’da tanımlar, yalnızca değişen dosyaları yeniden derlersin.
- Derleyici uyarıları: -Wall, -Wextra ve -Werror: Uyarı bayraklarını açar, uyarıları hata gibi ele alır ve yaygın kusurları derleme anında yakalarsın.
- Dosya işlemleri: fopen, fgets, fprintf, fclose: Metin dosyalarını açar, satır satır okur, yazar ve her açılan dosyayı kapatırsın.
- Hata denetimi: dönüş değerleri ve errno: Sistem çağrılarının ve kütüphane işlevlerinin dönüş değerlerini denetler, perror ile anlamlı hata mesajı verirsin.
- Kısa görev: dosyaya kayıt tutan rehber
Bitirme
- Bitirme görevi: günlük dosyasındaki olayları sayan C programı: Öğrendiklerini birleştirip bir günlüğü satır satır okuyan, olayları sayan ve çok dosyalı derlenen bir program yazarsın.
Pratik lablar
- Fiyat listesini hizalı yazdırmak: Ürün adlarını ve fiyatlarını printf genişlik ve hassasiyet belirteçleriyle hizalı sütunlarda yazdır ve çıktı testini geçir.
- scanf dönüş değerini denetlemek: Harf girilince sonsuz döngüye giren yaş okuma kodunu scanf dönüş değerini denetleyip girdiyi temizleyerek düzelt.
- Yakıt maliyeti hesaplayıcısını sağlamlaştırmak: Mesafe ve tüketim okuyan hesaplayıcının negatif, sıfır ve aşırı büyük girdilerde anlamlı hata vermesini sağla.
- İzin bitlerini maskelerle okumak: Bir izin değerinden okuma, yazma ve çalıştırma bitlerini & işleciyle çıkarıp rwx biçiminde yazdır.
- Renk bileşenlerini tek sayıya paketlemek: Kırmızı, yeşil ve mavi değerlerini kaydırma ile 32 bitlik bir sayıya paketleyen ve geri açan iki fonksiyon yaz.
- Cihaz yazmacında bayrak yönetmek: Bir cihaz yazmacında belirli bitleri set eden, temizleyen ve çeviren fonksiyonları yaz; diğer bitlere dokunulmadığını test et.
- Ayın gün sayısını bulmak: Yıl ve ay alıp artık yılları da hesaba katarak gün sayısını dönen fonksiyonu switch ile yaz.
- Otopark ücretini kademeli hesaplamak: Mavikoy Belediyesi otoparkı için saat dilimlerine göre kademeli ücret ve günlük üst sınır uygulayan fonksiyonu yaz.
- Gizli global durumu static ile toplamak: Global değişkenlerle karışan bir kimlik üretecini static yerel değişken ve dosya kapsamıyla yeniden yaz; testler bozulmasın.
- Haftalık sıcaklık dizisinin istatistiği: Yedi günlük sıcaklık dizisinin en düşük, en yüksek ve ortalama değerini hesaplayan fonksiyonu yaz.
- Sonlandırıcıya kadar karakter saymak: strlen kullanmadan bir char dizisini \0'a kadar gezip ünlü ve ünsüz harfleri sayan fonksiyonu yaz.
- Sinema salonunda yan yana koltuk bulmak: İki boyutlu koltuk dizisinde istenen sayıda boş yan yana koltuğu bulan fonksiyonu yaz ve sınır taşmalarını engelle.
- Kitap kaydını struct ile tutmak: Çınaraltı Kütüphanesi için başlık, yazar ve yıl tutan bir struct tanımla ve kaydı tek satırda yazdıran fonksiyonu ekle.
- Sipariş durumlarını enum ile yönetmek: Sipariş durumları için bir enum tanımla ve yalnızca izin verilen geçişleri kabul eden fonksiyonu yaz.
- Personel dizisini iki alana göre sıralamak: Struct dizisini önce departmana sonra ada göre sıralayan bir sıralama yaz; eşit kayıtların sırası korunsun.
- Dosya açma hatasını errno ile raporlamak: Ayar dosyasını açan koda fopen kontrolü ekle ve hata durumunda strerror(errno) ile anlaşılır mesaj yazdır.
- İki dosyalı projeye Makefile yazmak: Başlık dosyası ve iki .c dosyasından oluşan projeye yalnızca değişen dosyayı yeniden derleyen bir Makefile yaz.
- -Wall -Wextra uyarılarını sıfırlamak: Uyarılarla dolu küçük bir programı -Wall -Wextra -Werror ile derlenir hale getir; gizli iki hatayı da düzelt.
- İki dosyayı elle derleyip bağlamak: İki kaynak dosyasını gcc -c ile ayrı ayrı derle, nesne dosyalarını bağla ve eksik prototip yüzünden çıkan uyarıyı başlık dosyasıyla gider.
- Dosyadaki satırları fgets ile saymak: Bir metin dosyasını fgets ile satır satır okuyup boş olmayan satırları say; son satırda satır sonu olmasa da sayı doğru çıksın ve dosya kapatılsın.
- Dosyayı her adımı denetleyerek kopyalamak: Bir dosyayı fread ve fwrite ile kopyalayan programda okuma, yazma ve kapatma hatalarını ayrı ayrı denetle; hata olursa yarım kalan hedef dosya silinsin ve sıfır olmayan kodla çıkılsın.
Kurs hakkında
İşletim sistemlerinin ve birçok güvenlik aracının dili olan C’yi sıfırdan öğrenir, derleyiciyle çalışmayı ve uyarıları okumayı kavrarsın.
Ne öğreneceksin
- Başlarken
- Akış denetimi ve işlevler
- Yapılar, dosyalar ve hatalar
- Bitirme
Ön koşullar
Ön bilgi gerekmez; kurs sıfırdan başlar.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs başlangıç düzeyindedir; her terim ilk geçtiği yerde açıklanır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.