0.3 โปรแกรมแรก Hello World
โปรแกรมแรกของคนเรียนเขียนโปรแกรมแทบทุกคนบนโลก คือสั่งให้คอมพิวเตอร์พิมพ์คำว่า Hello, World! ออกมา ถ้าทำหน้านี้ได้ แปลว่าเครื่องพร้อม และน้องพร้อมเริ่มเรียนจริงแล้ว
ขั้นที่ 1 สร้างไฟล์
- เปิด Code::Blocks
- เมนู File > New > Empty file
- บันทึกทันทีก่อนพิมพ์อะไร กด Ctrl+S เลือกโฟลเดอร์
C:\codeตั้งชื่อhello.cแล้วกด Save
ต้องบันทึกเป็น .c ก่อนพิมพ์
ถ้ายังไม่บันทึก Code::Blocks ไม่รู้ว่าไฟล์นี้เป็นภาษาอะไร ตัวหนังสือจะไม่มีสี และกดรันไม่ได้ พอบันทึกเป็น .c แล้ว ลองพิมพ์อะไรสักอย่าง จะเห็นคำสำคัญเปลี่ยนสี
ขั้นที่ 2 พิมพ์โค้ด
พิมพ์เองทีละตัว อย่าก๊อปวาง
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
ขั้นที่ 3 รัน
กด F9 (หรือเมนู Build > Build and run)
Code::Blocks จะแปลโค้ดด้วย gcc ได้ไฟล์ hello.exe แล้วเปิดหน้าต่างสีดำขึ้นมารันให้
Hello, World!
Process returned 0 (0x0) execution time : 0.012 s
Press any key to continue.
- บรรทัดแรกคือสิ่งที่โปรแกรมของเราพิมพ์
- สองบรรทัดล่าง Code::Blocks เติมให้เอง บอกว่าโปรแกรมจบแล้ว และใช้เวลาเท่าไร ตอนส่งโจทย์จริง grader ไม่เห็นสองบรรทัดนี้ grader คือโปรแกรมที่ตรวจคำตอบอัตโนมัติในการแข่งขัน มันรันโค้ดของเราแล้วเทียบสิ่งที่พิมพ์ออกมากับคำตอบ
- กดปุ่มอะไรก็ได้เพื่อปิดหน้าต่าง
ถ้าเห็น Hello, World! แปลว่าผ่านแล้ว
โค้ดแต่ละบรรทัดทำอะไร
#include <stdio.h> // (1)!
int main() // (2)!
{ // (3)!
printf("Hello, World!\n"); // (4)!
return 0; // (5)!
}
- ดึงชุดคำสั่งเรื่องรับและแสดงผล (standard input output) มาใช้ ถ้าไม่มีบรรทัดนี้ จะใช้
printfไม่ได้ mainคือจุดเริ่มของโปรแกรม รันเมื่อไรจะเริ่มทำที่นี่เสมอ ทุกโปรแกรมต้องมีmainหนึ่งตัว- ปีกกาเปิดและปิดครอบคำสั่งทั้งหมดที่เป็นของ
main printfพิมพ์ข้อความในเครื่องหมายคำพูดออกจอ\nคือขึ้นบรรทัดใหม่ และทุกคำสั่งต้องจบด้วย;- บอกว่าโปรแกรมจบแบบปกติ เลข 0 นี้คือที่มาของ
Process returned 0ในหน้าต่างดำ
กดที่วงกลมตัวเลขในโค้ดเพื่อดูคำอธิบายแต่ละบรรทัด
ลองเปลี่ยนดู
- เปลี่ยนข้อความเป็นชื่อตัวเองแบบตัวอังกฤษ เพราะหน้าต่างดำแสดงภาษาไทยเพี้ยน แล้วกด F9 อีกครั้ง
- ลบ
\nออก แล้วรัน สังเกตว่าบรรทัด Process returned ไปต่อท้ายตรงไหน - เพิ่ม
printfอีกบรรทัด ให้พิมพ์ข้อความสองบรรทัด
ลองทำให้พัง
เขียนโปรแกรมแล้วเจอ error เป็นเรื่องปกติที่สุด คนเขียนเก่งไม่ใช่คนที่ไม่เจอ error แต่คือคนที่ อ่าน error ออก ลองทำให้พังทีละแบบ แล้วกลับมาแก้ให้ถูกก่อนลองแบบถัดไป
เวลามี error ดูที่แท็บ Build messages ด้านล่างของ Code::Blocks จะบอกชื่อไฟล์ เลขบรรทัด และข้อความ ดับเบิลคลิกที่บรรทัดสีแดงจะกระโดดไปที่จุดนั้นในโค้ด
แบบที่ 1 ลืม ;
ลบ ; หลัง printf(...) แล้วกด F9
hello.c:5:30: error: expected ';' before 'return'
5 | printf("Hello, World!\n")
| ^
| ;
6 | return 0;
อ่านแบบนี้
hello.c:5:30คือไฟล์ hello.c บรรทัดที่ 5 ตัวอักษรที่ 30expected ';' before 'return'คือ ควรมี;ก่อนคำว่า return- compiler ถึงกับวาด
^ชี้ และบอกว่าควรใส่;ตรงนั้น
แบบที่ 2 ลืม #include <stdio.h>
ลบบรรทัดแรกทิ้ง แล้วกด F9
hello.c:4:5: error: implicit declaration of function 'printf'
note: include '<stdio.h>' or provide a declaration of 'printf'
compiler ไม่รู้จัก printf เพราะเราไม่ได้ดึง stdio.h มา และมันบอกวิธีแก้มาให้เลยว่า include <stdio.h>
เว็บอื่นอาจบอกว่าแค่เตือน
compiler รุ่นเก่าแค่เตือนเรื่องนี้แล้วยอมรันต่อ แต่ GCC 14 ที่มากับ Code::Blocks 25.03 ถือเป็น error ถ้าไปเจอตัวอย่างในเว็บอื่นที่ไม่ตรงกับเครื่องเรา ให้เชื่อสิ่งที่เครื่องเราบอก
แบบที่ 3 กดรันซ้ำตอนหน้าต่างดำยังเปิดอยู่
กด F9 ให้หน้าต่างดำขึ้น อย่าเพิ่งปิด แล้วกลับไปที่ Code::Blocks กด F9 อีกครั้ง
ld.exe: cannot open output file hello.exe: Permission denied
collect2.exe: error: ld returned 1 exit status
hello.exe ตัวเก่ายังรันอยู่ Windows เลยไม่ยอมให้เขียนทับ แก้ด้วยการปิดหน้าต่างดำก่อนแล้วค่อยรันใหม่ error นี้เจอบ่อยมาก จำไว้ว่าไม่ได้แปลว่าโค้ดผิด
สรุป
- ไฟล์ภาษา C ต้องลงท้ายด้วย
.cและบันทึกก่อนเริ่มพิมพ์ - F9 คือแปลแล้วรัน
- error บอกเลขบรรทัดเสมอ อ่านจากบรรทัดแรกของ error ก่อน
- ทุกคำสั่งจบด้วย
;
กลับไปเช็กรายการ ผ่านบทนี้เมื่อ ถ้าครบทุกข้อ พร้อมไปบทที่ 1 แล้ว