Làm cách nào để viết (nếu có thể ...) một hàm có số lượng tham số không xác định trong C99 (kiểu trả về là hằng số)?Chức năng với số tham số không xác định trong C
Trả lời
Có bạn có thể làm điều đó trong C sử dụng những gì được gọi là chức năng variadic. Ví dụ, các hàm chuẩn printf()
và scanf()
làm điều này.
Đặt dấu ba chấm (ba chấm) làm thông số cuối cùng mà bạn muốn có 'số lượng tham số thay đổi.
Để truy cập vào các thông số bao gồm <stdarg.h>
tiêu đề:
#include <stdarg.h>
Và sau đó bạn có một loại đặc biệt va_list
mà cung cấp cho bạn danh sách các đối số được thông qua, và bạn có thể sử dụng va_start
, va_arg
và va_end
macro để lặp thông qua danh sách các đối số.
Ví dụ:
#include <stdarg.h>
int myfunc(int count, ...)
{
va_list list;
int j = 0;
va_start(list, count);
for(j=0; j<count; j++)
{
printf("%d", va_arg(list, int));
}
va_end(list);
return count;
}
Ví dụ gọi:
myfunc(4, -9, 12, 43, 217);
Một ví dụ đầy đủ có thể được tìm thấy tại Wikipedia.
Tham số count
trong ví dụ cho biết hàm được gọi có bao nhiêu đối số được chuyển. Các số printf()
và scanf()
tìm ra điều đó thông qua chuỗi định dạng, nhưng đối số đơn giản count
cũng có thể làm điều đó. Đôi khi, mã sử dụng giá trị sentinel, chẳng hạn như số nguyên âm hoặc con trỏ rỗng (xem execl()
chẳng hạn).
Định dạng với ví dụ hiện có:
int yourFunc (int abc, ...) {
//your code here
}
Đó chỉ là mẫu thử nghiệm. –
Đó không còn chỉ là một nguyên mẫu, nhưng nó hầu như không giải thích đầy đủ về cách làm việc với các đối số chiều dài thay đổi. –
- 1. C++: chức năng chuyển với số tham số tùy ý dưới dạng tham số
- 2. C# enums là tham số chức năng?
- 3. Chức năng Ruby với số tham số không giới hạn
- 4. Tham số và chức năng ngầm định
- 5. Chức năng gửi C++ với tham số mẫu
- 6. Nhiều tham số trong một tham số (chức năng) trong C/C++
- 7. Chuỗi trong tham số chức năng
- 8. Làm chức năng mẫu tham số unsigned trong C++ 11
- 9. C++ 11 variadic std :: tham số chức năng
- 10. Tham số chức năng GetStringUTFChars
- 11. loại tham số chức năng và =>
- 12. "này" trong tham số chức năng
- 13. mẫu template chức năng tham số
- 14. Tham số chức năng mẫu C++ variadic với giá trị mặc định
- 15. Cách xác định tệp, chức năng và số dòng?
- 16. Đi qua C mảng như tham số chức năng char *
- 17. Con trỏ hàm với tham số mặc định trong C++
- 18. truyền tham số cho chức năng đóng cửa trong javascript
- 19. PHP chức năng tham số mặc định gọi
- 20. Xác định tham số kiểu chung bị chặn trong C#
- 21. Trợ giúp với các tham số JS và chức năng
- 22. Giá trị mặc định cho tham số chức năng?
- 23. Chức năng có thể lấy số đối số không xác định không?
- 24. Chức năng mẫu C++ lấy lớp mẫu làm tham số
- 25. C++ * vs [] như một tham số chức năng
- 26. Sự cố với hai chức năng định dạng tham số trong tăng :: regex_replace
- 27. Giá trị mặc định của tham số chức năng
- 28. ref cho các biến không tham số trong chức năng
- 29. Emitting chức năng với tùy chọn tham số
- 30. Chức năng gọi lại Javascript với các tham số
Bạn có nghĩa là một hàm variadic? Giống như 'printf'? Bạn đã tra cứu '' chưa? –
Potatoswatter
Tải một cuốn sách về C hoặc tìm kiếm những thứ như thế này trực tuyến. –
có thể trùng lặp của [truyền số biến đối số] (http://stackoverflow.com/questions/3836272/passing-variable-number-of-arguments) – Potatoswatter