|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看了可变参数以后,浮现出一个问题,是否有什么办法可以在提取可变参数过程中,对一些自己不想要的类型的值进行过滤例如下面的代码,我只想要传入是int的值,而不想要char类型的值,但是他还是全部给我打印出来了。
- #include <stdio.h>
- #include <stdarg.h>
- int compare(int, ...);
- int compare(int num, ...){
- va_list test;
- va_start(test, num);
- for(int a=0; a<num;a++){
- printf("%d", va_arg(test, int));
- printf("\n");
- }
- va_end(test);
- return 0;
- }
- int main()
- {
- unsigned char a = 's';
- double b = 2.05656;
- compare(8,2,3,4,5,a,a,5,b);
- return 0;
- }
复制代码
输出结果如下:- 2
- 3
- 4
- 5
- 115
- 115
- 5
- -1162733546
复制代码
在这样的函数里面是不知道调用者传入的是什么的,要通过其他方法告诉这样的函数
这就像 printf 这类函数,你用错格式程序照样可以运行,但是执行结果一般不是你期望的
- #include <stdio.h>
- #include <stdarg.h>
- int compare(const char format[], int num, ...) {
- va_list test;
- va_start(test, num);
- for(int a = 0; a < num; a++){
- switch(format[a]) {
- case 0: // char
- va_arg(test, int); // no error
- break;
- case 1: // int
- printf("%d\n", va_arg(test, int));
- break;
- case 2: // double
- va_arg(test, double);
- break;
- }
- }
- va_end(test);
- return 0;
- }
- int main(void) {
- unsigned char a = 's';
- double b = 2.05656;
- char format[] = {1, 1, 1, 1, 0, 0, 1, 2};
- compare(format, 8, 2, 3, 4, 5, a, a, 5, b);
- return 0;
- }
复制代码
|
|