Sign in

Part of 10306103 หลักการเขียนโปรแกรมเบื้องต้น (Fundamentals of Programming)

2026-11-09 · 6 min read

ติดตั้ง compiler และรันโปรแกรมภาษา C บนเครื่องของคุณ (Windows และ macOS)

ShareFacebookXLinkedInLINE
ติดตั้ง compiler และรันโปรแกรมภาษา C บนเครื่องของคุณ (Windows และ macOS)

ในใบงาน (worksheet) ของ course-10306103 บน sarachai.com คุณทดสอบโค้ดภาษา C ผ่านเว็บได้ทันทีโดยไม่ต้องติดตั้งอะไร เพราะระบบคอมไพล์ให้บนเซิร์ฟเวอร์ด้วยคำสั่ง gcc -std=c11 -Wall -O0 -o main main.c -lm บน Linux บทความนี้ทำให้เครื่องของคุณ (Windows หรือ macOS) ใช้คำสั่งชุดเดียวกันนั้นได้ จึงเห็น warning และผลลัพธ์ตรงกับบนเว็บ ทั้งตอนทำการบ้านนอกห้อง ทำงานแบบออฟไลน์ และตอนเตรียมสอบ

ผังช่วยเลือกวิธีติดตั้ง compiler ตามระบบปฏิบัติการ: Windows ใช้ MSYS2 หรือ w64devkit ส่วน macOS ใช้ Apple Clang หรือ Homebrew
รูปที่ 1 เลือกทางติดตั้งตามเครื่องของคุณ

สำหรับเครื่อง Windows — ทางเลือกที่ 1 (แนะนำ): MSYS2 + VS Code

ตรงตามคำแนะนำทางการของ MSYS2 และ เอกสาร VS Code สำหรับ C/C++ บน Windows

1) ติดตั้ง MSYS2 และ gcc

  1. ดาวน์โหลดตัวติดตั้งจาก msys2.org (ต้องเป็น Windows 10 1809+ แบบ 64-bit) แล้วติดตั้งตามปกติ (ค่าเริ่มต้นทั้งหมด)

  2. เปิด MSYS2 UCRT64 (ไอคอนชื่อ "MSYS2 UCRT64" — ต้องเป็น UCRT64 เท่านั้น ไม่ใช่ MSYS หรือ MINGW64)

  3. อัปเดต MSYS2 ก่อน (ขั้นบังคับตาม msys2.org): รัน pacman -Syu — ถ้าหน้าต่างปิดไปเอง ให้เปิด MSYS2 UCRT64 ขึ้นมาใหม่แล้วรันซ้ำจนขึ้นว่า "there is nothing to do" จึงไปขั้นถัดไป (ข้ามขั้นนี้แล้วติดตั้งทับคือสาเหตุยอดฮิตของ error แบบ keyring/signature ที่มือใหม่แก้เองยาก)

  4. ติดตั้ง gcc:

    BASH
    pacman -S mingw-w64-ucrt-x86_64-gcc

    (จะถามยืนยัน กด Enter ยอมรับทั้งหมด)

  5. เพิ่ม C:\msys64\ucrt64\bin ลงใน PATH ของ Windows: กด Win+R พิมพ์ rundll32 sysdm.cpl,EditEnvironmentVariables แล้วกด Enter เพื่อเปิดหน้าต่าง Environment Variables โดยตรง (หรือค้นคำว่า "environment variables" ในเมนู Start) — ใน กรอบบน (User variables) เลือกแถว Path → Edit… → New → วาง C:\msys64\ucrt64\bin → OK ทุกหน้าต่าง (อย่าไปแก้กรอบล่าง System variables)

  6. ทดสอบว่า PATH ใช้ได้จริง: ปิดหน้าต่าง terminal ทุกหน้าต่าง (รวม MSYS2 UCRT64) แล้วเปิด PowerShell ใหม่ (กด Start พิมพ์ powershell) แล้วรัน:

    POWERSHELL
    gcc --version

    ต้องรันใน PowerShell ไม่ใช่ในหน้าต่าง MSYS2 ที่เปิดค้าง (MSYS2 เจอ gcc เสมอ จึงพิสูจน์ PATH ของ Windows ไม่ได้) — ถ้ายังขึ้นว่าหาคำสั่ง gcc ไม่เจอ ให้ restart เครื่องแล้วลองอีกครั้ง

สามหน้าต่างของ MSYS2 เทียบกัน: MSYS และ MINGW64 ใช้ไม่ได้ ต้องเปิด MSYS2 UCRT64 ซึ่งติดตั้ง gcc ไว้ที่ C:\msys64\ucrt64\bin
รูปที่ 2 เปิดหน้าต่าง MSYS2 UCRT64 เท่านั้น

2) ติดตั้ง VS Code

  1. ดาวน์โหลดจาก code.visualstudio.com แล้วติดตั้ง (แนะนำให้ติ๊ก "Add to PATH" และเพิ่มเมนูคลิกขวา Open with Code)
  2. ติดตั้งส่วนขยาย C/C++ ของ Microsoft จาก Marketplace (ไอคอน Extensions → ค้น "C/C++")

3) เขียนและรันโปรแกรมแรก

ℹ️ถ้าเพิ่งแก้ PATH จากหัวข้อก่อน

ต้องปิด VS Code ทั้งโปรแกรมแล้วเปิดใหม่ก่อน เพราะ terminal ใน VS Code รับค่า PATH ตอนที่โปรแกรมเปิด ไม่ใช่ตอนเปิดแท็บใหม่

ไดอะแกรมแสดงว่า terminal รับค่า PATH ตอนเปิดโปรแกรม การเปิดแท็บใหม่ใน VS Code เดิมจึงยังไม่เห็น gcc ต้องปิดทั้งโปรแกรมหรือเปิด PowerShell หน้าต่างใหม่
รูปที่ 3 terminal รับ PATH ใหม่ตอนเปิดโปรแกรม
  1. สร้างโฟลเดอร์งาน เช่น C:\c-work แล้วเปิดโฟลเดอร์นั้นใน VS Code (File → Open Folder)

  2. สร้างไฟล์ main.c (VS Code บันทึกเป็น UTF-8 ให้อัตโนมัติ — ไม่ต้องแก้) แล้ววางโค้ดแรกลงไป:

    C
    #include <stdio.h>
     
    int main(void) {
        printf("Hello, World!\n");
        return 0;
    }

    (โค้ดชุดนี้แสดงผลภาษาอังกฤษ เพื่อให้รันแรกสบายใจก่อน — วิธีให้ printf ภาษาไทยแสดงถูกต้องบน Windows อยู่ในหัวข้อ "ภาษาไทยในผลลัพธ์เพี้ยน" ด้านล่าง)

  3. เปิด terminal ใน VS Code (Terminal → New Terminal) แล้วรัน:

    POWERSHELL
    gcc -std=c11 -Wall -O0 -o main main.c -lm
    .\main.exe
ผังการทำงานจากไฟล์ main.c ผ่าน gcc ไปเป็น main.exe บน Windows หรือ main บน macOS ด้วยคำสั่งคอมไพล์ชุดเดียวกับบนเว็บ
รูปที่ 4 จาก main.c ถึงผลลัพธ์ ด้วยคำสั่งชุดเดียวกับบนเว็บ
💡คำสั่งชุดเดียวกับบนเว็บ

gcc -std=c11 -Wall -O0 -o main main.c -lm เป็นคำสั่งชุดเดียวกับที่ระบบใบงานบนเว็บใช้ จึงเห็น warning/error ตรงกัน

สำหรับเครื่อง Windows — ทางเลือกที่ 2 (สำรอง): w64devkit — แตกไฟล์ใช้ได้เลย

เหมาะกับเครื่องที่ติดตั้งโปรแกรมไม่ได้ (ไม่มีสิทธิ์ admin) หรืออยากได้ compiler แบบพกพา

  1. ดาวน์โหลด w64devkit-x64-<เวอร์ชัน>.7z.exe ล่าสุดจาก หน้า releases ของ w64devkit บน GitHub (เครื่อง Windows ปกติเป็น 64-bit เลือก x64, ~70 MB)

  2. ดับเบิลคลิกไฟล์ แล้วกด Extract เลือกตำแหน่ง เช่น ไดรฟ์ C: จะได้โฟลเดอร์ w64devkit (ไฟล์นี้แตกไฟล์เองได้ ไม่ต้องติดตั้งโปรแกรมเสริม; ย้ายไปแฟลชไดรฟ์ก็ใช้ได้)

  3. เปิด terminal ที่โฟลเดอร์ของ main.c (เช่น พิมพ์ cd C:\c-work) แล้วคอมไพล์ด้วย bin\gcc.exe จากโฟลเดอร์ที่แตกไว้:

    POWERSHELL
    C:\w64devkit\bin\gcc.exe -std=c11 -Wall -O0 -o main main.c -lm
    .\main.exe

    (รัน main.exe จากโฟลเดอร์เดียวกับ main.c; บน PowerShell ต้องมี .\ นำหน้าเสมอ) (หรือเพิ่ม C:\w64devkit\bin ลง PATH ตามวิธีในขั้นที่ 5 ของทางเลือกที่ 1 — เพิ่มในกรอบ User variables เท่านั้น — แล้วใช้ gcc ตรง ๆ)

  4. editor ใช้ VS Code หรือ Notepad++ ก็ได้

สำหรับ MacBook (macOS)

macOS ติดตั้ง compiler ได้ด้วยคำสั่งเดียวผ่าน Command Line Tools — ไม่ต้องติดตั้ง Xcode เต็มตัว (หลาย GB ไม่จำเป็น) ข้อควรรู้: เครื่อง Mac ที่เพิ่งแกะกล่องยังไม่มี compiler จนกว่าจะทำขั้นที่ 1 ด้านล่าง

ทางเลือกที่ 1 (แนะนำ): Apple Clang + VS Code

  1. เปิด Terminal (Applications → Utilities → Terminal) แล้วรัน:

    BASH
    xcode-select --install

    จะขึ้นหน้าต่างให้ติดตั้ง กด Install แล้วรอจนเสร็จ (วิธีนี้เป็นทางการของ Apple)

  2. ตรวจสอบ:

    BASH
    gcc --version

    จะขึ้น Apple clang version … — เป็นปกติ ไม่ใช่ความผิดพลาด คำสั่ง gcc บน macOS เป็นชื่อแฝงของ clang (จุดที่มือใหม่มักงง)

  3. ติดตั้ง VS Code + ส่วนขยาย C/C++ เหมือนฝั่ง Windows (ดาวน์โหลดเวอร์ชัน Mac จาก code.visualstudio.com)

  4. คอมไพล์ด้วยคำสั่งชุดเดียวกับบนเว็บ:

    BASH
    gcc -std=c11 -Wall -O0 -o main main.c -lm
    ./main

    หมายเหตุ: flag -lm บน macOS ไม่จำเป็น (math library รวมอยู่ใน libSystem แล้ว) แต่ใส่ไว้ได้ ไม่มีผลเสีย ทำให้ใช้คำสั่งเดียวกันทุกเครื่อง

clang กับ gcc ให้ผลรันเหมือนกันสำหรับโค้ด C11 มาตรฐานในบทเรียน ต่างกันแค่ข้อความ warning/error บางอันอาจเขียนไม่เหมือนกัน ถ้าเจออะไรประหลาดบนเครื่อง ให้เทียบกับผลบนเว็บ (gcc ตัวจริง) เสมอ

ทางเลือกที่ 2: gcc ตัวจริงผ่าน Homebrew

ต้องการ compiler ตัวเดียวกับระบบใบงาน (gcc ตัวจริง ไม่ใช่ clang) ให้ติดตั้งเพิ่ม:

  1. ติดตั้ง Homebrew (คัดลอกคำสั่งจากหน้าเว็บมารันใน Terminal) — ระหว่างติดตั้งจะถามรหัสเครื่อง ตอนพิมพ์หน้าจอจะไม่ขึ้นตัวอักษรเลย ให้พิมพ์จนจบแล้วกด Enter (เป็นปกติ)

  2. รัน brew install gcc

  3. Homebrew ตั้งชื่อไม่ให้ทับ gcc ของ Apple โดยติดเลขเวอร์ชันกำกับท้ายชื่อ (ปัจจุบันคือ gcc-16 เลขจะเปลี่ยนเมื่อมีเวอร์ชันใหม่) — ดูชื่อจริงจากข้อความที่ brew แสดงตอนติดตั้งเสร็จ หรือรัน brew list gcc:

    BASH
    gcc-16 -std=c11 -Wall -O0 -o main main.c -lm
    ./main

    ถ้าอยากพิมพ์ gcc สั้น ๆ รัน echo 'alias gcc=gcc-16' >> ~/.zshrc แล้วปิดและเปิด Terminal ใหม่ (เลขใน alias ต้องตรงกับชื่อที่ติดตั้งจริง)

แนะจากชุมชน (r/C_Programming): นักศึกษาส่วนใหญ่ใช้ Apple Clang ก็เพียงพอ Homebrew gcc จำเป็นเมื่อต้องใช้ OpenMP (-fopenmp ซึ่ง clang ของ Apple ไม่รองรับ อ้างจาก Stack Overflow) หรืออยากได้ toolchain ตรงกับ Linux — สำหรับรายวิชานี้ Clang เพียงพอ

ภาษาไทยบน macOS: ไม่ต้องแก้อะไร

Terminal ของ macOS ใช้ UTF-8 เป็นค่าเริ่มต้นอยู่แล้ว printf("สวัสดี\n"); แสดงภาษาไทยถูกต้องทันที ไม่ต้อง chcp 65001 และ อย่าใช้ #include <windows.h> (คอมไพล์ไม่ผ่านบน macOS) — ใช้โค้ดเวอร์ชัน portable ในหัวข้อภาษาไทยด้านล่าง ซึ่งใช้ไฟล์เดียวกันได้ทั้ง Windows, macOS และบนเว็บ (Linux)

ทางเลือกอื่นที่พบบ่อย

  • Code::Blocks (เวอร์ชันที่มาพร้อม MinGW): ติดตั้งตัวเดียวได้ editor + compiler ใช้ง่ายสำหรับมือใหม่ แต่ gcc ที่มากับตัวติดตั้งเก่ากว่า gcc ปัจจุบันใน MSYS2 หลายเวอร์ชัน และการ build ผ่าน GUI จะไม่เห็น flag -std=c11 -Wall -O0 ที่เว็บใช้ ถ้าใช้ ให้ตั้งค่า compiler flags ในโปรเจกต์ให้ตรง หรือใช้ terminal คอมไพล์เอง
  • Dev-C++ เวอร์ชันเก่า (gcc 4.9.2): ไม่แนะนำ — รองรับ C11 ไม่ครบและจัดการ UTF-8 ได้ไม่ดี ทำให้โค้ดตัวอย่างในบทเรียน (ที่มีข้อความภาษาไทย) ผลลัพธ์ต่างจากบนเว็บ ถ้ามีติดตั้งอยู่ ให้เปลี่ยนไปใช้ทางเลือกที่ 1 หรือ 2 ฝั่ง Windows ด้านบน
  • WSL2 (Ubuntu ใน Windows): สภาพแวดล้อม Linux ตรงกับเซิร์ฟเวอร์มากที่สุด แต่ติดตั้งซับซ้อนและเครื่องเก่าอาจไม่รองรับ — เกินจำเป็นสำหรับรายวิชานี้

ภาษาไทยในผลลัพธ์เพี้ยน (อ่านให้ครบ!)

⚠️ต่างจากบนเว็บตรงนี้

บนเว็บ (Linux) แสดงภาษาไทยได้ทันที แต่ Windows console เริ่มต้นไม่ได้ใช้ UTF-8 จึงเจอตัวอักษรเพี้ยนเมื่อ printf ข้อความไทย — ใช้วิธีด้านล่างนี้

ภาพเปรียบเทียบการ printf ภาษาไทย: แยกสองครั้งทำให้ไบต์ UTF-8 ถูกตัดกลางคันและแสดงผลเพี้ยน ส่วน printf เดียวแสดงผลถูกต้อง พร้อมบทบาทของ chcp 65001
รูปที่ 5 ทำไมภาษาไทยเพี้ยนและวิธีให้แสดงผลถูกต้อง
  1. ไฟล์ .c ต้องบันทึกเป็น UTF-8 (VS Code ทำให้อยู่แล้ว; ถ้าใช้ editor อื่น ให้เลือก encoding UTF-8 ตอนบันทึก)

  2. สั่ง terminal ใช้ UTF-8 ก่อนรัน (เฉพาะ Windows — คำสั่งนี้ไม่มีบน macOS):

    POWERSHELL
    chcp 65001

    (ค่านี้ต้องรันซ้ำทุกครั้งที่เปิดหน้าต่าง terminal ใหม่ ก่อนสั่งรันโปรแกรม; ถ้าไม่อยากพิมพ์ซ้ำ ตั้งค่าถาวรได้ตาม วิธีใน Superuser) หรือใส่ในโค้ดเลยด้วยเวอร์ชัน portable นี้ — ใช้ไฟล์เดียวกันได้ทั้ง Windows, macOS และบนเว็บ (บล็อก #ifdef _WIN32 จะถูกข้ามบน macOS/Linux อัตโนมัติ):

    C
    #include <stdio.h>
     
    #ifdef _WIN32
    #include <windows.h>
    #endif
     
    int main(void) {
    #ifdef _WIN32
        SetConsoleOutputCP(CP_UTF8);   /* เฉพาะ Windows: ให้ console อ่าน UTF-8 */
    #endif
        printf("สวัสดีชาวโลก\n");
        return 0;
    }

    (macOS ไม่ต้องทำข้อ 2 เลย เพราะ Terminal ใช้ UTF-8 เป็นค่าเริ่มต้นอยู่แล้ว)

  3. ถ้ายังแสดงเป็นกล่อง ๆ แปลว่า font ของ terminal ไม่มีตัวอักษรไทย ให้เปลี่ยนเป็น font ที่รองรับไทย เช่น Leelawadee UI — Windows Terminal: กด Ctrl+, → เลือก profile ที่ใช้งาน → Appearance → Font face; VS Code: เปิด Settings (Ctrl+,) ค้นหา "Terminal › Integrated: Font Family" — หน้าต่าง cmd แบบเก่ามักให้เลือกได้เฉพาะ font ที่ไม่มีตัวอักษรไทย ถ้าเจอแบบนั้นให้รันโปรแกรมผ่าน terminal ใน VS Code หรือ Windows Terminal แทน

  4. อย่าประกอบข้อความไทยเดียวกันด้วย printf หลายครั้ง (เช่น printf("สวัสดี"); ตามด้วย printf("ครับ\n");) เพราะบางกรณีไบต์ UTF-8 ของตัวอักษรไทยจะถูกตัดกลางคันระหว่างการเรียก ทำให้แสดงผลเพี้ยน — ให้รวมเป็น printf เดียวต่อบรรทัดผลลัพธ์ (อ้างอิงพฤติกรรมของ chcp 65001 จาก Stack Overflow)

เช็คลิสต์ยืนยันว่าเครื่องตรงกับบนเว็บ

  • gcc --version ขึ้นเวอร์ชัน 13+ (ไม่ใช่ 4.x) — ฝั่ง macOS ขึ้น Apple clang version … (หรือ gcc-16 --version หรือเลขเวอร์ชันตามที่ Homebrew ติดตั้งจริง หากใช้ gcc ของ Homebrew) ถือว่าผ่าน
  • คอมไพล์ด้วย gcc -std=c11 -Wall -O0 -o main main.c -lm ได้ ไม่ error
  • โปรแกรมที่ printf("สวัสดี\n"); แสดงไทยถูกต้อง (หลังทำขั้น UTF-8 ข้างบน)
  • โค้ดที่รันผ่านบนเว็บ รันผลเหมือนกันบนเครื่อง (และกลับกัน)

แหล่งอ้างอิง

By Watcharin Sarachai