Part of 10306103 หลักการเขียนโปรแกรมเบื้องต้น (Fundamentals of Programming)
ติดตั้ง compiler และรันโปรแกรมภาษา C บนเครื่องของคุณ (Windows และ macOS)
ในใบงาน (worksheet) ของ course-10306103 บน sarachai.com คุณทดสอบโค้ดภาษา C ผ่านเว็บได้ทันทีโดยไม่ต้องติดตั้งอะไร เพราะระบบคอมไพล์ให้บนเซิร์ฟเวอร์ด้วยคำสั่ง gcc -std=c11 -Wall -O0 -o main main.c -lm บน Linux บทความนี้ทำให้เครื่องของคุณ (Windows หรือ macOS) ใช้คำสั่งชุดเดียวกันนั้นได้ จึงเห็น warning และผลลัพธ์ตรงกับบนเว็บ ทั้งตอนทำการบ้านนอกห้อง ทำงานแบบออฟไลน์ และตอนเตรียมสอบ
สำหรับเครื่อง Windows — ทางเลือกที่ 1 (แนะนำ): MSYS2 + VS Code
ตรงตามคำแนะนำทางการของ MSYS2 และ เอกสาร VS Code สำหรับ C/C++ บน Windows
1) ติดตั้ง MSYS2 และ gcc
-
ดาวน์โหลดตัวติดตั้งจาก msys2.org (ต้องเป็น Windows 10 1809+ แบบ 64-bit) แล้วติดตั้งตามปกติ (ค่าเริ่มต้นทั้งหมด)
-
เปิด MSYS2 UCRT64 (ไอคอนชื่อ "MSYS2 UCRT64" — ต้องเป็น UCRT64 เท่านั้น ไม่ใช่ MSYS หรือ MINGW64)
-
อัปเดต MSYS2 ก่อน (ขั้นบังคับตาม msys2.org): รัน
pacman -Syu— ถ้าหน้าต่างปิดไปเอง ให้เปิด MSYS2 UCRT64 ขึ้นมาใหม่แล้วรันซ้ำจนขึ้นว่า "there is nothing to do" จึงไปขั้นถัดไป (ข้ามขั้นนี้แล้วติดตั้งทับคือสาเหตุยอดฮิตของ error แบบ keyring/signature ที่มือใหม่แก้เองยาก) -
ติดตั้ง gcc:
BASHpacman -S mingw-w64-ucrt-x86_64-gcc(จะถามยืนยัน กด Enter ยอมรับทั้งหมด)
-
เพิ่ม
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) -
ทดสอบว่า PATH ใช้ได้จริง: ปิดหน้าต่าง terminal ทุกหน้าต่าง (รวม MSYS2 UCRT64) แล้วเปิด PowerShell ใหม่ (กด Start พิมพ์ powershell) แล้วรัน:
POWERSHELLgcc --versionต้องรันใน PowerShell ไม่ใช่ในหน้าต่าง MSYS2 ที่เปิดค้าง (MSYS2 เจอ gcc เสมอ จึงพิสูจน์ PATH ของ Windows ไม่ได้) — ถ้ายังขึ้นว่าหาคำสั่ง
gccไม่เจอ ให้ restart เครื่องแล้วลองอีกครั้ง
2) ติดตั้ง VS Code
- ดาวน์โหลดจาก code.visualstudio.com แล้วติดตั้ง (แนะนำให้ติ๊ก "Add to PATH" และเพิ่มเมนูคลิกขวา Open with Code)
- ติดตั้งส่วนขยาย C/C++ ของ Microsoft จาก Marketplace (ไอคอน Extensions → ค้น "C/C++")
3) เขียนและรันโปรแกรมแรก
ต้องปิด VS Code ทั้งโปรแกรมแล้วเปิดใหม่ก่อน เพราะ terminal ใน VS Code รับค่า PATH ตอนที่โปรแกรมเปิด ไม่ใช่ตอนเปิดแท็บใหม่
-
สร้างโฟลเดอร์งาน เช่น
C:\c-workแล้วเปิดโฟลเดอร์นั้นใน VS Code (File → Open Folder) -
สร้างไฟล์
main.c(VS Code บันทึกเป็น UTF-8 ให้อัตโนมัติ — ไม่ต้องแก้) แล้ววางโค้ดแรกลงไป:C#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; }(โค้ดชุดนี้แสดงผลภาษาอังกฤษ เพื่อให้รันแรกสบายใจก่อน — วิธีให้
printfภาษาไทยแสดงถูกต้องบน Windows อยู่ในหัวข้อ "ภาษาไทยในผลลัพธ์เพี้ยน" ด้านล่าง) -
เปิด terminal ใน VS Code (Terminal → New Terminal) แล้วรัน:
POWERSHELLgcc -std=c11 -Wall -O0 -o main main.c -lm .\main.exe
gcc -std=c11 -Wall -O0 -o main main.c -lm เป็นคำสั่งชุดเดียวกับที่ระบบใบงานบนเว็บใช้ จึงเห็น warning/error ตรงกัน
สำหรับเครื่อง Windows — ทางเลือกที่ 2 (สำรอง): w64devkit — แตกไฟล์ใช้ได้เลย
เหมาะกับเครื่องที่ติดตั้งโปรแกรมไม่ได้ (ไม่มีสิทธิ์ admin) หรืออยากได้ compiler แบบพกพา
-
ดาวน์โหลด
w64devkit-x64-<เวอร์ชัน>.7z.exeล่าสุดจาก หน้า releases ของ w64devkit บน GitHub (เครื่อง Windows ปกติเป็น 64-bit เลือก x64, ~70 MB) -
ดับเบิลคลิกไฟล์ แล้วกด Extract เลือกตำแหน่ง เช่น ไดรฟ์ C: จะได้โฟลเดอร์
w64devkit(ไฟล์นี้แตกไฟล์เองได้ ไม่ต้องติดตั้งโปรแกรมเสริม; ย้ายไปแฟลชไดรฟ์ก็ใช้ได้) -
เปิด terminal ที่โฟลเดอร์ของ
main.c(เช่น พิมพ์cd C:\c-work) แล้วคอมไพล์ด้วยbin\gcc.exeจากโฟลเดอร์ที่แตกไว้:POWERSHELLC:\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ตรง ๆ) -
editor ใช้ VS Code หรือ Notepad++ ก็ได้
สำหรับ MacBook (macOS)
macOS ติดตั้ง compiler ได้ด้วยคำสั่งเดียวผ่าน Command Line Tools — ไม่ต้องติดตั้ง Xcode เต็มตัว (หลาย GB ไม่จำเป็น) ข้อควรรู้: เครื่อง Mac ที่เพิ่งแกะกล่องยังไม่มี compiler จนกว่าจะทำขั้นที่ 1 ด้านล่าง
ทางเลือกที่ 1 (แนะนำ): Apple Clang + VS Code
-
เปิด Terminal (Applications → Utilities → Terminal) แล้วรัน:
BASHxcode-select --installจะขึ้นหน้าต่างให้ติดตั้ง กด Install แล้วรอจนเสร็จ (วิธีนี้เป็นทางการของ Apple)
-
ตรวจสอบ:
BASHgcc --versionจะขึ้น
Apple clang version …— เป็นปกติ ไม่ใช่ความผิดพลาด คำสั่งgccบน macOS เป็นชื่อแฝงของ clang (จุดที่มือใหม่มักงง) -
ติดตั้ง VS Code + ส่วนขยาย C/C++ เหมือนฝั่ง Windows (ดาวน์โหลดเวอร์ชัน Mac จาก code.visualstudio.com)
-
คอมไพล์ด้วยคำสั่งชุดเดียวกับบนเว็บ:
BASHgcc -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) ให้ติดตั้งเพิ่ม:
-
ติดตั้ง Homebrew (คัดลอกคำสั่งจากหน้าเว็บมารันใน Terminal) — ระหว่างติดตั้งจะถามรหัสเครื่อง ตอนพิมพ์หน้าจอจะไม่ขึ้นตัวอักษรเลย ให้พิมพ์จนจบแล้วกด Enter (เป็นปกติ)
-
รัน
brew install gcc -
Homebrew ตั้งชื่อไม่ให้ทับ
gccของ Apple โดยติดเลขเวอร์ชันกำกับท้ายชื่อ (ปัจจุบันคือgcc-16เลขจะเปลี่ยนเมื่อมีเวอร์ชันใหม่) — ดูชื่อจริงจากข้อความที่ brew แสดงตอนติดตั้งเสร็จ หรือรันbrew list gcc:BASHgcc-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 ข้อความไทย — ใช้วิธีด้านล่างนี้
-
ไฟล์ .c ต้องบันทึกเป็น UTF-8 (VS Code ทำให้อยู่แล้ว; ถ้าใช้ editor อื่น ให้เลือก encoding UTF-8 ตอนบันทึก)
-
สั่ง terminal ใช้ UTF-8 ก่อนรัน (เฉพาะ Windows — คำสั่งนี้ไม่มีบน macOS):
POWERSHELLchcp 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 เป็นค่าเริ่มต้นอยู่แล้ว)
-
ถ้ายังแสดงเป็นกล่อง ๆ แปลว่า 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 แทน
-
อย่าประกอบข้อความไทยเดียวกันด้วย
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 ข้างบน) - โค้ดที่รันผ่านบนเว็บ รันผลเหมือนกันบนเครื่อง (และกลับกัน)