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++
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