Namespace và prefix tên trong C
C++ namespace tạo scoped name; thư viện C thường prefix public identifier vì function nằm trong global namespace.
Namespace và prefix tên trong C là gì?
C++ namespace tạo scoped name; thư viện C thường prefix public identifier vì function nằm trong global namespace.
Ngăn symbol collision trong chương trình lớn.
Điểm quan trọng
- Hiểu cơ chế trong C trước khi học abstraction của C++.
- Dùng RAII và value semantics để diễn đạt ownership.
- Ưu tiên abstraction type-safe hơn macro và cast.
Code ví dụ bằng C và 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
So sánh C và C++
Prefix C là convention; namespace C++ được compiler thực thi và hỗ trợ alias cùng qualified lookup.
C
C dùng naming convention, callback, macro và context struct.
C++
Tính năng ngôn ngữ cung cấp abstraction có scope, type-safe và thường zero-overhead.
Bài tập mở rộng
Chạy cả hai phiên bản rồi thay đổi để quan sát khác biệt về bảo đảm của từng ngôn ngữ.
- Viết cơ chế bằng C trước abstraction C++.
- Loại bỏ manual cleanup bằng RAII.
- Kiểm tra allocation hoặc virtual dispatch phát sinh.