Giới thiệu
Khác biệt giữa C và C++ khi gọi hàm được khai báo không tham số.
Code kiểm tra
void method() { /* Print statement */ }
int main() {
method();
method(2); // Truyền đối số cho hàm không tham số
}
Kết quả
| Ngôn ngữ | Kết quả |
|---|---|
| C++ | Lỗi compile: error: too many arguments to function 'void method()' |
| C | Chạy bình thường (không lỗi) |
Nguyên nhân
- C++:
void method() nghĩa là hàm không nhận bất kỳ tham số nào (tương đươngvoid method(void)). Truyền đối số → lỗi kiểu. - C:
void method() nghĩa là hàm có thể nhận số lượng tham số bất kỳ (kiểu hàm cũ K&R). Trình biên dịch không kiểm tra số lượng đối số.
Best Practice
Trong C, luôn khai báo rõ ràng:
void method(void) { ... } // Không tham số
void method(int x) { ... } // Có tham số
Điều này làm code tương thích cả C và C++, tránh lỗi ngầm.