ข้ามไปที่เนื้อหา

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 `** -> **Compiler จะหาฟังก์ชันอย่าง `std::cout` หรือ `std::endl` ไม่เจอ** -> **ใส่ `#include ` ทุกครั้งที่ต้องการจัดการ Console (02:07)**

📎 Repo Files

  • 03.FirstSteps/3.2FirstCppProgram/main.cpp
  • 03.FirstSteps/3.3Comments/main.cpp
  • 03.FirstSteps/3.4ErrorsWarnings/main.cpp
  • 03.FirstSteps/3.5StatementsAndFunctions/main.cpp
  • 03.FirstSteps/3.6DataInputAndOutput/main.cpp