C คืออะไร



C ออกแบบโดย Dennis Ritchie ที่ Bell Labs ราวปี 1972 เพื่อเขียนระบบปฏิบัติการ Unix — ผ่านมา 50 ปี มันยังอยู่ในที่สำคัญที่สุดของคอมพิวเตอร์แทบทุกเครื่องที่คุณใช้

C อยู่ตรงไหนบ้าง

  • เคอร์เนล — Linux, ส่วนใหญ่ของ Windows, macOS (XNU); Android วางอยู่บนเคอร์เนล Linux และมีส่วนระบบระดับล่างจำนวนมากเขียนด้วย C/C++
  • ภาษาอื่นสร้างบน C — CPython (ตัวรัน Python), Ruby MRI, PHP, Lua, Node.js (V8 เป็น C++ แต่ libuv เป็น C)
  • ฐานข้อมูลและเครื่องมือ — SQLite, PostgreSQL, Redis, Git, curl, nginx, FFmpeg
  • Embedded / IoT — ไมโครคอนโทรลเลอร์แทบทุกตัว, เฟิร์มแวร์, ระบบยานยนต์
  • ไลบรารีมาตรฐาน — libc ที่ทุกโปรแกรมบนเครื่องเรียกใช้

พูดง่าย ๆ คือ ถ้าโค้ดต้องเร็วมาก, ใกล้ฮาร์ดแวร์, หรือเป็นฐานให้ของอื่น — มันมักเป็น C

C ต่างจากภาษาสมัยใหม่ยังไง

ภาษาอย่าง Python, JavaScript, Go มี garbage collector คอยเก็บหน่วยความจำที่ไม่ใช้แล้วให้อัตโนมัติ C ไม่มี — คุณขอหน่วยความจำเอง (malloc) และคืนเอง (free) ถ้าลืมคืน = memory leak ถ้าคืนแล้วยังใช้ = โปรแกรมพัง

Python / JavaScriptGoC
จัดการหน่วยความจำGC อัตโนมัติGC อัตโนมัติด้วยมือ (malloc / free)
เข้าถึงนอกขอบอาร์เรย์Python: IndexError · JS: คืน undefined (ไม่แตะหน่วยความจำนอกขอบ)panic ถ้าเกินไม่ตรวจ — undefined behavior
ชนิดข้อมูลdynamic (ตรวจตอนรัน)static (ตรวจตอนคอมไพล์)static, type บาง
รันยังไงทั่วไป: คอมไพล์เป็น bytecode แล้วรันบน VM/JITคอมไพล์เป็นภาษาเครื่อง (มี runtime + GC)คอมไพล์เป็นภาษาเครื่องตรง ๆ (runtime เล็กมาก — แค่ startup + libc)
ความเร็วช้ากว่ามากใกล้เคียง C ในหลายงานเร็วมาก ควบคุม layout ได้เต็มที่
ความปลอดภัยหน่วยความจำภาษาช่วยกันพลาดภาษาช่วยกันพลาดคุณต้องระวังเอง

C ให้ การควบคุมเต็มที่ แลกกับ ความรับผิดชอบเต็มที่ — บั๊กหน่วยความจำใน C คือที่มาของช่องโหว่ความปลอดภัยจำนวนมหาศาลในประวัติศาสตร์ (Heartbleed, ฯลฯ) ซีรีส์นี้จะสอนให้ระวังตั้งแต่ต้น

compiled ไม่ใช่ interpreted

Python แปลงโค้ดเป็น bytecode แล้วรันบน interpreter/VM (ไม่ต้องคอมไพล์เป็นไฟล์แยกก่อน) ส่วน C ต้อง คอมไพล์ ก่อน — แปลงโค้ดทั้งไฟล์เป็นภาษาเครื่อง (ไฟล์ executable) แล้วค่อยรัน

hello.c  --[คอมไพเลอร์ gcc]-->  hello (ไฟล์ executable)  --[รัน]-->  ผลลัพธ์

ข้อดี: เร็วมาก, ไม่ต้องมี interpreter บนเครื่องปลายทาง ข้อเสีย: แก้โค้ดแล้วต้องคอมไพล์ใหม่ทุกครั้ง, executable ผูกกับ OS/สถาปัตยกรรม

ตัวอย่างโปรแกรม C

#include <stdio.h>

int main(void)
{
    printf("สวัสดีจากภาษา C\n");
    return 0;
}

คอมไพล์และรัน:

gcc hello.c -o hello
./hello

ผลลัพธ์:

สวัสดีจากภาษา C

บทหน้าเราจะอธิบายทุกบรรทัด

ทำไมยังควรเรียน C ในปี 2026

  • เข้าใจคอมพิวเตอร์จริง ๆ — หน่วยความจำ, stack, heap, pointer, การที่ทุกอย่างเป็นไบต์ — เรียน C แล้วภาษาอื่นจะ “ใส” ขึ้น
  • อ่านโค้ดระบบได้ — อยากรู้ว่า Redis หรือ SQLite ทำงานยังไง ต้องอ่าน C เป็น
  • งาน embedded / kernel / เกมเอนจิน / high-performance ยังต้องการคนเขียน C/C++
  • เป็นฐานของ C++ — เรียน C ก่อนแล้วต่อ C++ ง่ายกว่ามาก
  • debugging ที่ลึกขึ้น — เข้าใจ segfault, stack trace, core dump

ไม่ใช่ว่าทุกคนต้องเขียน C ทุกวัน แต่การ *เข้าใจ* C ทำให้เป็นโปรแกรมเมอร์ที่ดีขึ้นในทุกภาษา

เรื่องที่คนมักพลาด

  • คิดว่า C กับ C++ เหมือนกัน — C++ เป็นภาษาใหญ่กว่ามาก (class, template, RAII, STL) C เล็กและตรงไปตรงมา ซีรีส์นี้สอน C ล้วน
  • คาดหวังว่า C จะเตือนเวลาทำผิด — ส่วนใหญ่ไม่เตือน โปรแกรมอาจรันได้ปกติวันนี้แล้วพังพรุ่งนี้ ต้องเปิด -Wall -Wextra และใช้ sanitizer
  • คิดว่าเรียน C แล้วจะเขียนเว็บ/แอปได้เร็ว — C ไม่เหมาะกับงานนั้น มันเหมาะกับงานระบบและงานที่ต้องการความเร็วสูงสุด
  • ข้ามเรื่อง pointer เพราะยาก — pointer คือหัวใจของ C ข้ามไม่ได้ เฟส 2 ทั้งเฟสว่าด้วยเรื่องนี้

สรุป

  • C เป็นภาษาเก่าแก่แต่ยังเป็นฐานของ OS, ภาษาอื่น, ฐานข้อมูล และงาน embedded จำนวนมาก
  • ไม่มี garbage collector, ไม่ตรวจขอบอาร์เรย์ — ให้การควบคุมเต็มที่แลกกับความรับผิดชอบเต็มที่
  • เป็นภาษา compiled: gcc file.c -o prog แล้วรัน ./prog
  • เรียน C เพื่อเข้าใจคอมพิวเตอร์ อ่านโค้ดระบบ และเป็นโปรแกรมเมอร์ที่ดีขึ้นในทุกภาษา

บทถัดไปเราจะติดตั้ง GCC หรือ Clang คอมไพล์โปรแกรมแรก และเข้าใจว่าคอมไพเลอร์ทำอะไรบ้างระหว่าง .c กับไฟล์ที่รันได้