Ch2: Diving in¶
TL;DR: Entry Point: ฟังก์ชัน
main()คือจุดเริ่มต้นของโปรแกรม โดยคำสั่งต่างๆ จะทำงานเรียงจากบนลงล่างจนถึงวงเล็บปิด
⚡ Quick Reference¶
#include <iostream>
#include <string>
int main() {
// // - คอมเมนต์บรรทัดเดียว ซึ่งจะถูกข้ามตอน Build
/* ... */ // /* ... */ - คอมเมนต์แบบบล็อกหลายบรรทัด ซึ่งจะถูกข้ามตอน Build
std::cout << "Hello C++" << std::endl; // std::cout << - ส่งข้อมูลในรูปแบบ Output Stream จากโปรแกรมไปยัง Console
// std::endl - ใส่ตัวอักษรขึ้นบรรทัดใหม่ และเคลียร์ Output Buffer
std::cerr << "Standard error" << std::endl; // std::cerr - Standard Error Stream แบบ Unbuffered สำหรับแสดง Error Message
std::clog << "Standard log" << std::endl; // std::clog - Standard Log Stream แบบ Buffered สำหรับบันทึกเหตุการณ์ของโปรแกรม
std::string var;
std::getline(std::cin, var); // std::getline(std::cin, var) - อ่านข้อมูลทั้งบรรทัด (รวมถึงเว้นวรรค) เข้ามาเก็บไว้ใน String
int num;
std::cin >> num; // std::cin >> - อ่านข้อมูลที่ผู้ใช้พิมพ์เข้ามาใน Console ไปเก็บในตัวแปร
return 0; // return 0; - ส่งสัญญาณกลับไปยัง OS ว่าโปรแกรมทำงานเสร็จสมบูรณ์
}
🧠 Core Concepts¶
- Entry Point: ฟังก์ชัน
main()คือจุดเริ่มต้นของโปรแกรม โดยคำสั่งต่างๆ จะทำงานเรียงจากบนลงล่างจนถึงวงเล็บปิด - Execution Model: Source code จะถูก Compile เป็น Binary แล้วโหลดเข้า RAM จากนั้น CPU จะประมวลผลทีละคำสั่ง พร้อมจัดการกับ Call Address
- C++ Ecosystem: แบ่งออกเป็น Core language (ไวยากรณ์และประเภทข้อมูลพื้นฐาน), Standard Library (Header ต่างๆ เช่น
<iostream>), และ STL (Standard Template Library เช่น Container, Algorithm, Iterator)
⚠️ Pitfalls (Quick Scan)¶
| ข้อผิดพลาด | วิธีแก้ |
|---|---|
| ลืมใส่ Semicolon | ต้องปิดท้ายคำสั่งด้วย Semicolon (;) เสมอ |
การใช้ Block Comment ซ้อนกัน (/ / ... / /) |
ห้ามใส่ Block Comment ซ้อนกัน ให้เลี่ยงไปใช้ Single-line Comment (//) แทน |
| การหารด้วยศูนย์ (Division by zero) | ตรวจสอบให้แน่ใจว่าตัวหารไม่ใช่ 0 ก่อนการหารเสมอ |
การใช้ std::cin >> รับค่าที่มีช่องว่าง |
ใช้ std::getline() เมื่อต้องการรับข้อมูลที่มีช่องว่าง |
ไม่ได้ใส่ #include <iostream> |
ใส่ #include <iostream> ทุกครั้งที่ต้องการจัดการ Console |
📖 Full Details¶
Cause → Effect → Fix พร้อม timestamp (คลิกเพื่อดู)
* **ลืมใส่ Semicolon** -> **เกิด Compile-time error เช่น `expected ';'` ก่อนหน้า `return`** -> **ต้องปิดท้ายคำสั่งด้วย Semicolon (`;`) เสมอ (10:00)** * **การใช้ Block Comment ซ้อนกัน (`/* /* ... */ */`)** -> **เกิด Compiler error พร้อมข้อความแจ้งเตือนที่ชวนสับสน** -> **ห้ามใส่ Block Comment ซ้อนกัน ให้เลี่ยงไปใช้ Single-line Comment (`//`) แทน (07:03)** * **การหารด้วยศูนย์ (Division by zero)** -> **เกิด Undefined behavior หรือโปรแกรมค้าง/แครชตอน Runtime แทนที่จะเตือนตั้งแต่ตอน Compile** -> **ตรวจสอบให้แน่ใจว่าตัวหารไม่ใช่ 0 ก่อนการหารเสมอ (10:45)** * **การใช้ `std::cin >>` รับค่าที่มีช่องว่าง** -> **โปรแกรมจะตัดคำตรงช่องว่างแรก ทำให้เหลือข้อมูลตกค้างใน Input Buffer** -> **ใช้ `std::getline()` เมื่อต้องการรับข้อมูลที่มีช่องว่าง (23:30)** * **ไม่ได้ใส่ `#include📎 Repo Files¶
03.FirstSteps/3.2FirstCppProgram/main.cpp03.FirstSteps/3.3Comments/main.cpp03.FirstSteps/3.4ErrorsWarnings/main.cpp03.FirstSteps/3.5StatementsAndFunctions/main.cpp03.FirstSteps/3.6DataInputAndOutput/main.cpp