2009-03-01 24 views
49

Tôi đã xem qua một định nghĩa hàm:Câu hỏi về định nghĩa hàm (ba dấu chấm trong các thông số ..)

char* abc(char *f, ...) 
{ 
} 

làm ba chấm có ý nghĩa gì?

+6

cảm ơn tất cả vì phản ứng nhanh ... cộng đồng này chỉ là awsome .. – ashishsony

+1

well..this câu hỏi này cho thấy rằng tôi không chú ý trong khi tôi đã được mã hóa cho một năm cuối cùng chuyên nghiệp, như tôi đã sử dụng printf, scanf rất nhiều lần ... nhưng nó không bao giờ bấm vào tôi cách các chức năng này có thể chấp nhận các đối số vô hạn .. tôi cần phải tự hỏi những câu hỏi đó cho bản thân mình thường xuyên hơn nhiều. – ashishsony

Trả lời

38

Dấu ba chấm có nghĩa là có một số biến đối số sau.

Chúng cho phép bạn tạo các chức năng của kiểu đó khi thông số không được biết trước và bạn có thể sử dụng các hàm varargs (), va_argva_end) để nhận các đối số cụ thể.

Liên kết này here có một luận thuyết tốt về việc sử dụng danh sách đối số biến.

11

Chúng được gọi là elipsis và có nghĩa là hàm có thể lấy số tham số không xác định. Chức năng của bạn có thể có thể được gọi như thế này:

abc("foo", 0); 
abc("foo", "bar", 0); 

Cần có cách để chỉ ra phần cuối của danh sách. Điều này có thể được thực hiện bằng cách sử dụng tham số đầu tiên, như là một ion printf (chuỗi định dạng 0, hoặc bởi một terminator đặc biệt, số 0 trong ví dụ trên)

Chức năng với một số biến tham số được coi là xấu trong C++, không thể kiểm tra loại hoặc chuyển đổi do người dùng xác định có thể được thực hiện trên các tham số

3

Đây là những gì được gọi là một hàm varargs hoặc một chức năng lập luận biến trong C.

Một có thể bạn sẽ nhận ra là printf.

Các vấn đề liên quan