我們是否可以同時將不同數據類型的參數傳遞給相同的可變參數函數?變量函數中的變量數據類型參數
2
A
回答
2
so ross$ expand < variadic.c && cc -Wall -Wextra variadic.c
#include <stdio.h>
#include <stdarg.h>
void f(int, ...);
struct x { int a, b; } y = { 5, 6 };
int main(void) {
float q = 9.4;
f(0, 1.234, &q, "how now", 123, &y);
return 0;
}
void f(int nothing, ...) {
va_list ap;
va_start(ap, nothing);
double f = va_arg(ap, double);
float *f2 = va_arg(ap, float *);
char *s = va_arg(ap, char *);
int i = va_arg(ap, int);
struct x *sx = va_arg(ap, struct x *);
va_end(ap);
printf("%5.3f %3.1f %s %d %d/%d\n", f, *f2, s, i, sx->a, sx->b);
}
so ross$ ./a.out
1.234 9.4 how now 123 5/6
3
肯定的是,看的printf的常見用法:
printf("Error %d: %s", errNum, errTxt);
0
這裏有一個免費的printf例如(舊版:http://codepad.org/vnjFj7Uh)
#include <stdarg.h>
#include <stdio.h>
/* return the maximum of n values. if n < 1 returns 0 */
/* lying to the compiler is not supported in this version, eg: **
** va_max(4, 8, 8, 8, 8, 8, 8, 8, 8) **
** or **
** va_max(4, 2, 2) **
/* is a bad way to call the function (and invokes Undefined Behaviour) */
int va_max(int n, ...) {
int res;
va_list arg;
if (n < 1) return 0;
va_start(arg, n);
n--;
res = va_arg(arg, int);
while (n--) {
int cur = va_arg(arg, int);
if (cur > res) res = cur;
}
return res;
}
int main(void) {
int test6 = va_max(6, 1, 2, 3, 4, 5, 6);
int test3 = va_max(3, 56, 34, 12);
if (test6 == 6) puts("6");
if (test3 == 56) puts("56");
return 0;
}
+0
只是一個技術細節...我在那裏看到一對'printf'調用... ;-) – 2010-10-04 15:08:51
+0
主要功能是一個想法...但現在沒有更多的printfs(除了在鍵盤上) – pmg 2010-10-04 15:50:05
0
我做了一個函數來解壓二進制數據使用可變函數,根據您想要「編碼/解碼」的 需要不同的類型。
你會使用它像:
uint32_t a;
uint16_t b;
uint16_t c;
uint8_t *buf = ....;
depickle(buf,"sis",&a,&b,&c);
其中「s」期望一個uint16_t *和解碼來自buf
2個字節到a
爲小尾數,「我」說要4個字節的小端解碼成'b'
或者例如解碼4個字節大端爲uint32_t的:
uint32_t a;
uint8_t buf[] = {0x12,0x34,0x56,0x78};
depickle(buf,"I",&a);
目前仍然是圍繞here的早期版本。
相關問題
- 1. 使用可變參數類型參數的變量函數
- 2. 參數類類型變量
- 3. 變量類型參數
- 4. php變量數據類型
- 5. 函數參數變量名
- 6. PHP類作爲函數參數變量
- 7. 根據函數參數獲取變量?
- 8. 變量更新時變量參數發生變化的函數
- 9. iPhone中的變量參數ObjC函數
- 10. C++中函數參數的變量
- 11. ada中變量的數據類型
- 12. Python中的變量和數據類型
- 13. C++ ReSharper - 生成函數返回值/參數類型的變量
- 14. jQuery的類型函數作爲變量
- 15. 將不同數據類型的參數傳遞給Golang變量函數
- 16. Haskell非類型變量參數錯誤
- 17. C#反射類型與可變數量的類型參數
- 18. 函數中的變量變量?
- 19. 如何在lambda函數中捕獲變量數量的參數
- 20. 變量參數
- 21. 傳遞變量參數的函數
- 22. NSLog裏面的變量參數函數
- 23. Golang:將類型變量傳入函數
- 24. 類型的成員變量應取決於構造函數參數的類型
- 25. 可用作數據類型的變量。
- 26. 引用變量的數據類型(Java)
- 27. 變量數據類型的用途
- 28. 時區變量的數據類型
- 29. 變量函數
- 30. 變量函數
你可以舉一些例子,除了printf – Shweta 2010-10-04 04:41:44
@Shweta:scanf將是另一個明顯的例子。那些(以及sprintf,fscanf等變體)幾乎是真正廣泛使用的唯一可變參數函數。 – 2010-10-04 04:47:25