Trong khi bắt đầu với một số VS2005 mã tạo MFC, tôi nhận thấy nó gạt một phương thức với một cái gì đó như thế này:Tại sao mã C++ thiếu một tên đối số chính thức trong một biên dịch định nghĩa hàm mà không có cảnh báo?
void OnDraw(CDC* /*pDC*/)
{
...
// TODO: Add your code here
}
Vì vậy, tất nhiên, ngay sau khi tôi thêm một cái gì đó tôi nhận ra tôi cần thiết để bỏ comment PDC luận chính thức để biên dịch, nhưng tôi đang bối rối như thế nào/tại sao một ++ chức năng C có thể biên dịch (không có cảnh báo) khi tranh luận chính thức chỉ có một kiểu và không phải là một tên:
void foo(int)
{
int x = 3;
}
int main()
{
foo(5);
return 0;
}
shouldn' Điều này tạo ra ít nhất một cảnh báo (với -Wall hoặc/W4)? Nó dường như không. Tui bỏ lỡ điều gì vậy? Có trường hợp nào hữu ích hay chỉ vì trình biên dịch không thể cho biết sự khác biệt giữa khai báo hàm (chỉ loại yêu cầu) và định nghĩa (được chỉ định đầy đủ) cho đến sau khi dòng đã được xử lý?
Như một lưu ý bổ sung, nhiều trình biên dịch có một pragma để vô hiệu cảnh báo tham số không sử dụng - có liên quan hơn khi tham số * có * tên khóa học - chính xác vì có lý do hợp lệ tại sao điều này có thể xảy ra. Một số người thích để lại tên trong anyway, để cho biết mục đích sử dụng (theo giao diện), mặc dù nó không được sử dụng trong trường hợp này. – Steve314
Tôi đoán điều đó có ý nghĩa - tôi đoán nó là một cái gì đó dọc theo những dòng đó, nó dường như (với tôi) giống như một điều kiện cạnh bất thường để cho phép rõ ràng, khi (như đã nói bên dưới) C không cho phép nó. Nhưng quan điểm của bạn về các cuộc gọi đa hình chắc chắn là hợp lệ, và có ý nghĩa cho C++ đã xem xét nó. –