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 / JavaScript | Go | C | |
|---|---|---|---|
| จัดการหน่วยความจำ | 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 กับไฟล์ที่รันได้