C 3D logosu yanında bellek pointer bloğu ve yönlü referans oku bembeyaz arka planda premium kompozisyon

C eğitimi, bellek modelini ve pointer aritmetiğini görerek yazmak isteyen mühendisler için tasarlandı. Linux kernel, aygıt sürücüleri, RTOS ve gömülü sistemlerde yazılım yazan ekiplerin günlük gereksinimleri sezgisel örnekler üzerinden işlenir. C++ veya yüksek seviye diller önce, C sonra değil — temel C ile sistem seviyesi disiplin kurulur.

Program sonunda katılımcı, malloc ve free disipliniyle sızıntısız kod yazar; valgrind ve gcc warning flag'lerini günlük rutine alır. struct ve union'ın alignment davranışı, function pointer ile callback pattern, preprocessor token pasting tuzakları gibi konular somut örneklerle pekiştirilir.

Katılımcı Profili

Bu eğitim, C dilini sistem seviyesi disiplinle kullanmak isteyen rollere yöneliktir:

  • Sistem Programcıları: Linux kernel, driver ve işletim sistemi-seviye kod yazan mühendisler
  • Gömülü Yazılım Mühendisleri: Mikrokontrolör ve RTOS üzerinde C ile geliştirme yapanlar
  • Network Programcıları: Düşük seviyede protokol implement eden mühendisler
  • Yeni Başlayan Geliştiriciler: C ile programlamanın temel disiplinini öğrenmek isteyenler
  • C++ Geliştiriciler: C tarafıyla altyapı bilgilerini sağlamlaştırmak isteyen roller

Ön Gereklilikler

Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:

  • Herhangi bir dilde temel programlama (variable, loop, function) deneyimi
  • Algoritma ve veri yapılarına giriş düzeyi aşinalık
  • Komut satırı kullanımı ve dosya sistemi rahatlığı
  • Git ile temel sürüm kontrolü bilgisi
  • Derleyici hata mesajlarını okumaya açıklık

Süresi ve Tarihi

Süre: 3 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.

Kazanımlar

Eğitim sonunda katılımcı, C dilinin altında ne olduğunu görerek kod yazar — pointer ve bellek artık sihir değildir:

  • Pointer aritmetiğini ve dereference'i bellek modelinde adım adım izler
  • malloc, calloc, realloc ve free ile heap'i sızıntısız yönetir
  • struct ve union'ı alignment ile padding'i bilerek kullanır
  • Function pointer ile callback ve dispatch table pattern'i kurar
  • Preprocessor ve macro'yu token pasting tuzaklarına düşmeden yazar
  • printf format string güvenliği ve buffer overflow'a karşı disiplin kurar
  • gcc warning flag'leri ile valgrind'i bug tespitinde rutine sokar

Eğitim materyalleri ISO/IEC 9899 C dili standardı referans alınarak hazırlanır.


C Eğitimi Konuları

1. C Dilinin Mirası ve Modern Yeri

  • K&R'dan ANSI'ye, modern C standartlarına evrim
  • Sistem programlama, gömülü ve kernel kullanımı
  • GCC, Clang, MSVC derleyici karşılaştırması
  • Build araçları: Make, CMake, Ninja

2. Söz Dizimi ve Program Akışı

  • main fonksiyonu ve argc, argv parametreleri
  • printf, scanf format spesifiyerleri
  • Statement, expression ve blok yapısı
  • Derleme, link ve çalıştırma adımları
  • İlk program ve basit hata ayıklama

3. Tipler, Boyutlar ve Taşınabilirlik

  • int, char, float, double temel tipleri
  • signed, unsigned, short, long modifier'lar
  • sizeof ve platform farkları (32-bit vs 64-bit)
  • Implicit ve explicit cast kuralları
  • const, volatile, static, register anahtar kelimeleri
  • stdint.h ile fixed-width tipler (uint8_t, int32_t)

4. Operatörler ve Bit Manipülasyonu

  • Aritmetik, ilişkisel, mantıksal operatörler
  • Bitwise: AND, OR, XOR, NOT, shift
  • Operatör önceliği ve sequence point
  • Bit mask ile flag yönetimi (gömülü için kritik)
  • Endianness ve byte sıralama

5. Akış Kontrolü - if, switch, Döngü

  • if, else if, else dal kontrolü
  • switch-case ve fallthrough davranışı
  • for, while, do-while döngüleri
  • break, continue, goto ifadeleri

6. Fonksiyonlar ve Çağrı Kuralları

  • Fonksiyon tanımı, prototype, declaration
  • Pass by value ve pointer ile referans
  • Calling convention: cdecl, stdcall (Windows ile uyum)
  • Recursion, stack frame ve tail call
  • Inline function ve macro alternatifi

7. Diziler ve Bellek Yerleşimi

  • Statik dizi tanımı ve sınırları
  • 2D ve çok boyutlu dizi yönetimi
  • Dizi-pointer ilişkisi ve decay kuralı
  • Variable Length Array (VLA)
  • Buffer overflow riski ve sınır kontrolü

8. String ve Karakter Düzeyi İşleme

  • Char dizisi olarak string ve null terminator
  • string.h fonksiyonları: strlen, strcpy, strcmp, strcat
  • Güvenli alternatifler: strncpy, snprintf, strlcpy
  • ctype.h ile karakter sınıflandırma
  • UTF-8 ve multibyte string yaklaşımı

9. Pointer - C'nin İmza Özelliği

  • Adres operatörü (&) ve dereference (*)
  • Pointer tipi ve uyumluluk kuralları
  • NULL pointer ve güvenlik kontrolleri
  • const pointer ve pointer to const farkı
  • void* ve tip-bağımsız işaretçi
  • Function pointer ve callback tasarımı

10. Pointer Aritmetiği ve Sınırlar

  • Pointer aritmetiği ve tip boyutu etkisi
  • Pointer ile dizi gezme
  • Pointer to pointer ve çok seviyeli indirection
  • Strict aliasing rule ve uyumluluk
  • restrict anahtar kelimesi ve optimizasyon

11. Struct, Union, Bit Field

  • struct tanımı ve member erişimi
  • typedef ile tip alias oluşturma
  • union ile bellek paylaşımlı yapılar
  • Bit field ile paketlenmiş struct
  • Padding, alignment ve sizeof
  • enum ile sabit set tanımlama

12. Dinamik Bellek - malloc, free, realloc

  • Stack ve heap bellek ayrımı
  • malloc, calloc, realloc, free kullanımı
  • Memory leak ve double-free hataları
  • Dangling pointer ve use-after-free
  • Valgrind, AddressSanitizer ile tespit

13. Dosya I/O ve Standart Akışlar

  • FILE pointer, fopen, fclose modları
  • fread, fwrite, fgets, fputs operasyonları
  • Text ve binary dosya farkları
  • fseek, ftell ile pozisyon yönetimi
  • stdin, stdout, stderr ve pipe akışı

14. Preprocessor Mucizesi

  • #include, #define, #undef direktifleri
  • Koşullu derleme: #ifdef, #ifndef, #if
  • Function-like macro ve hidden side effect
  • Predefined macro: __FILE__, __LINE__, __func__
  • Stringification (#) ve token-pasting (##) operatörleri
  • X-Macro pattern ile veri-kod ayrımı

15. Modüler Tasarım ve Header Yönetimi

  • Interface (.h) ve implementation (.c) ayrımı
  • Header guard ve #pragma once
  • Static fonksiyon ile dosya scope
  • extern ile global değişken paylaşımı
  • Opaque pointer ile ABI gizliliği

16. Undefined Behavior - C'nin Tehlikeli Köşeleri

  • UB nedir, neden mevcut, derleyici varsayımları
  • Signed integer overflow ve sınır
  • Uninitialized variable kullanımı
  • Pointer aliasing ihlali
  • Sequence point ve evaluation order belirsizliği

17. Performans ve Cache Locality

  • Cache locality ve veri yerleşimi (struct of arrays vs array of structs)
  • Compiler optimizasyon seviyeleri (-O0 ila -O3)
  • Loop unrolling ve manuel optimizasyon
  • Profiling: gprof, perf, callgrind
  • SIMD ve intrinsic fonksiyonlara giriş

18. Debugging - GDB ve Valgrind

  • GDB başlatma ve temel komutlar
  • Breakpoint, watchpoint, conditional break
  • Step, next, continue ile akış kontrolü
  • Backtrace, frame, variable inceleme
  • Valgrind memcheck ve helgrind araçları
  • Core dump analizi ve post-mortem debug

C EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları


Pointer aritmetiği ve array decay nasıl ayırt edilir?

Array değişkeni fonksiyona parametre olarak geçtiğinde pointer'a 'decay' olur — sizeof artık array'in toplam boyutunu değil, pointer'ın boyutunu döner. Pointer aritmetiği ise pointer'a tip-boyutlu artış uygular; (ptr+1) sonraki elemanı işaret eder. Eğitimde bu ayrım somut sizeof hataları ile gösterilir.

malloc/free yerine static buffer ne zaman doğru?

Boyutu compile-time'da bilinen, kısa ömürlü buffer'lar için static veya stack array daha güvenli ve hızlıdır — fragmentasyon yok, allocation maliyeti yok. Dinamik boyut veya uzun ömür gerekiyorsa malloc kaçınılmaz. Gömülü sistemlerde malloc bazı RTOS'larda yasak — pool allocator tercih edilir.

struct padding ve alignment performansı nasıl etkiler?

CPU veriyi belirli alignment'ta okur (genelde tip boyutunda); compiler struct field'larına padding ekler. Yanlış sıralama (örn. char-int-char) yapı boyutunu artırır ve cache line'a daha az yapı sığar. Sıralamayı büyük-tipten küçük-tipe doğru yapmak hem boyutu küçültür hem cache verimini artırır.

Function pointer ile callback pattern nasıl yazılır?

Function pointer tipini typedef ile tanımlamak okunabilirliği artırır. Callback'e context geçmek için void* user_data parametresi standart pattern'dir. Eğitimde event handler, sort comparator ve plugin sistemi senaryoları üzerinden function pointer ve dispatch table örnekleri çalışılır.

Preprocessor macro ile inline function arasında karar nasıl verilir?

Macro tip-bağımsız ama yan etki tuzakları içerir (örn. MAX(a++, b++) iki kez artırır). Inline function tip-güvenli ve debug edilebilir; modern compiler zaten inline kararını otomatik verir. Pratikte: küçük yardımcı fonksiyon için inline function, koşullu derleme için macro tercih edilir.

Buffer overflow ve format string güvenliği nasıl önlenir?

strcpy yerine strncpy veya snprintf; gets() yerine fgets(); printf(user_input) yerine printf("%s", user_input). Modern derleyici -Wformat-security ve fortify_source ile çoğu pattern'i derleme zamanında yakalar. AddressSanitizer ve Valgrind runtime tespiti tamamlar.