2009-07-22 15 views
18

Khi một hàm C không chấp nhận bất kỳ đối số nào, nó có phải được khai báo/xác định với tham số "void" theo các quy tắc ngôn ngữ không? PC-Lint dường như có vấn đề khi không có gì trong danh sách đối số, và tôi đã tự hỏi nếu đó là một cái gì đó trong cú pháp ngôn ngữ mà tôi không biết.trong c: func (void) so với func()

Chỉnh sửa: Tôi vừa tìm thấy câu hỏi trùng lặp (back-dupe? It come first), C void arguments, có nhiều câu trả lời và giải thích hơn.

Trả lời

33

void nghĩa là chức năng không nhận bất kỳ thông số nào. Ví dụ,

int init (void) 
{ 
    return 1; 
} 

Đây là không giống như định nghĩa

int init() 
{ 
    return 1; 
} 

bởi vì trong trường hợp thứ hai trình biên dịch sẽ không kiểm tra xem chức năng thực sự là gọi mà không có lý lẽ gì cả; thay vào đó, một cuộc gọi hàm với số lượng đối số tùy ý sẽ được chấp nhận mà không có bất kỳ cảnh báo (điều này chỉ được thực hiện cho khả năng tương thích với cú pháp định nghĩa hàm kiểu cũ, pre-ANSI).

+0

Cảm ơn, bí ẩn đã được giải quyết. – noamtm

7

IIRC func (void) trong C sẽ khai báo hàm không có tham số trong khi hàm func() khai báo hàm sẽ nhận bất kỳ số tham số nào. Tôi tin rằng sau này là một tạo phẩm đến từ pre-ANSI C.

Theo Wikipedia ở đây, khai báo func() về cơ bản khai báo hàm "không có thông tin về tham số".

+0

Không phải là hàm có số tham số được xác định là func (...)? – noamtm

+2

Bạn tin đúng, trong danh sách tham số K & R C đã được xác định khác nhau (và kém). Nhưng trong C++ f() cũng giống như f (void) –

+2

@noamtm - một hàm của form func (a, b, ...); khai báo một hàm C có một danh sách đối số biến đổi theo nghĩa nào đó cũng sẽ lấy bất kỳ số tham số nào. –