C++ hiện đại và cách làm tương ứng trong C

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

C
Chạy code →
main.c
#include <stdio.h>

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

int main(void) {
    printf("%d\n", math_square(7));
}
Output dự kiến
49
C++
Chạy code →
main.cpp
#include <iostream>

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

int main() {
    std::cout << math::square(7) << '\n';
}
Output dự kiế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.