C và C ++ là khác nhau về mặt này.
Tiêu chuẩn trực tuyến C 2011
6.7.6.3 Các bộ khai báo hàm (bao gồm các nguyên mẫu)
...
10 Trường hợp đặc biệt của một tham số không tên thuộc loại void
là mục duy nhất trong danh sách chỉ định rằng hàm không có tham số.
...
14 Một danh sách định danh chỉ khai báo các định danh của các tham số của hàm. Một danh sách trống trong một bộ khai báo hàm là một phần của định nghĩa của hàm đó xác định rằng hàm không có tham số. Danh sách trống trong bộ khai báo hàm không phải là một phần của định nghĩa của hàm đó xác định rằng không có thông tin nào về số lượng hoặc loại tham số được cung cấp. 145)
Nói tóm lại, một danh sách tham số trống trong khai báo hàm chỉ ra rằng hàm lấy số lượng tham số không xác định , trong khi danh sách tham số trống trong định nghĩa hàm chỉ ra rằng hàm không có tham số.
T foo( void ); // declaration, foo takes no parameters
T bar(); // declaration, bar takes an *unspecified* number of parameters
T foo( void ) { ... } // definition, foo takes no parameters
T bar() { ... } // definition, bar takes no parameters
Theo như C có liên quan, bạn không bao giờ nên sử dụng danh sách định danh trống trong khai báo hoặc định nghĩa hàm. Nếu một hàm không có nghĩa là lấy bất kỳ tham số nào, hãy xác định rằng bằng cách sử dụng void
trong danh sách tham số.
Tiêu chuẩn C ++ trực tuyến
8.3.5 Hàm [dcl.fct]
...
4 Mệnh đề khai báo tham số xác định các đối số có thể được chỉ định và xử lý của chúng, khi hàm được gọi. [ Lưu ý: các tham số-khai-khoản được sử dụng để chuyển đổi các đối số quy định về các cuộc gọi chức năng; xem 5.2.2. - lưu ý cuối ] Nếu mệnh đề khai báo tham số trống, hàm không có đối số. Một danh sách tham số bao gồm một tham số chưa đặt tên thuộc loại không phụ thuộc void
tương đương với danh sách tham số trống. Ngoại trừ trường hợp đặc biệt này, một tham số sẽ không có loại cv void
. Nếu mệnh đề-khai báo-mệnh đềchấm dứt bằng dấu chấm lửng hoặc gói tham số chức năng (14,5.3), số lượng đối số sẽ bằng hoặc lớn hơn số lượng tham số không có đối số mặc định và không phải là gói tham số chức năng. Trường hợp chính xác về mặt cú pháp và nơi mà ... ... không phải là một phần của công cụ khai báo trừu tượng , thì, ... [ Ví dụ: tờ khai int printf(const char*, ...);
khai báo một hàm có thể được gọi với các số lượng và loại đối số khác nhau. printf("hello world");
printf("a=%d b=%d", a, b);
Tuy nhiên, đối số đầu tiên phải có một loại có thể được chuyển đổi sang một const char*
- cuối dụ ] [ Chú ý: Các tiêu đề chuẩn <cstdarg>
bao gồm một cơ chế cho các đối số truy cập được thông qua bằng cách sử dụng lược (xem 5.2.2 và 18.10). - lưu ý cuối ]
Trong trường hợp của C ++, một danh sách tham số trống trong khai báo hoặc định nghĩa chỉ ra rằng hàm không có đối số và tương đương với việc sử dụng danh sách tham số void
.