C++ สมัยใหม่และวิธีเทียบเคียงใน C

Namespace และ Prefix ชื่อใน C

C++ namespace สร้าง scope ส่วน C library ใส่ prefix ให้ public identifier

Namespace และ Prefix ชื่อใน C คืออะไร?

C++ namespace สร้าง scope ส่วน C library ใส่ prefix ให้ public identifier

ป้องกัน symbol collision ในโปรแกรมใหญ่

ประเด็นสำคัญ

  • เข้าใจกลไก C ก่อน abstraction ของ C++
  • ใช้ RAII และ value semantics แสดง ownership
  • เลือก abstraction ที่ type-safe แทน macro และ cast

ตัวอย่างโค้ด C และ C++

C
รันโค้ด →
main.c
#include <stdio.h>

int math_square(int value) {
    return value * value;
}

int main(void) {
    printf("%d\n", math_square(7));
}
ผลลัพธ์ที่คาดหวัง
49
C++
รันโค้ด →
main.cpp
#include <iostream>

namespace math {
    int square(int value) {
        return value * value;
    }
}

int main() {
    std::cout << math::square(7) << '\n';
}
ผลลัพธ์ที่คาดหวัง
49

เปรียบเทียบ C และ C++

Prefix C เป็น convention แต่ namespace C++ บังคับโดย compiler และรองรับ alias กับ qualified lookup

C

C ใช้ prefix, callback, macro และ context struct

C++

ภาษาให้ abstraction ที่มี scope และ type-safe

แบบฝึกหัด

รันทั้งสองเวอร์ชันแล้วแก้ไขเพื่อสังเกตความแตกต่างของภาษา

  • เขียนกลไก C ก่อน
  • แทน manual cleanup ด้วย RAII
  • ตรวจ allocation และ virtual dispatch