[C语言]支持命名参数的函数调用
2013-06-20 17:32
183 查看
转载自:/article/4994791.html
对于参数较多的函数,如UI库函数,你很难去记忆每个位置的参数类型和意义,尤其在你的IDE比较简陋的开发环境下,尤为痛苦,可能你需要频繁的查询文档。
像Python这样语言,原生支持命名参数,如
可能你的函数有10个参数,其中大部分都可以有默认值,因此,如果你需要指定其中第3、第5个参数的值,而其他参数使用默认行为的时候,"func(arg3 = 3, arg5 = 5)"这样的调用很方便。
要在C89中实现命名参数的特性(我的编译器仍然是gcc 4.7.2),可以使用陈浩这篇文章提到的技巧。
下面是我写的宏:
而且,相比普通函数,通过这种方式定义的函数用起来也基本是性能无损的。
对于参数较多的函数,如UI库函数,你很难去记忆每个位置的参数类型和意义,尤其在你的IDE比较简陋的开发环境下,尤为痛苦,可能你需要频繁的查询文档。
像Python这样语言,原生支持命名参数,如
def func(name, age): print name, age func('aaa', 1) func(age = 2, name = 'bbb')
可能你的函数有10个参数,其中大部分都可以有默认值,因此,如果你需要指定其中第3、第5个参数的值,而其他参数使用默认行为的时候,"func(arg3 = 3, arg5 = 5)"这样的调用很方便。
要在C89中实现命名参数的特性(我的编译器仍然是gcc 4.7.2),可以使用陈浩这篇文章提到的技巧。
下面是我写的宏:
#include <stdio.h> #define function(ret, funcName, ...) struct __args_##funcName{__VA_ARGS__}; ret funcName(struct __args_##funcName args) #define call(funcName, ...) func((struct __args_##funcName){__VA_ARGS__}) function(void, func, const char *name; int age;) { printf("name:%s\n age:%d\n", args.name, args.age); } int main() { call(func, "aa123", 10); call(func, .age = 5, .name = "abc456"); call(func, .name = "def789"); call(func, .age = 11); }
而且,相比普通函数,通过这种方式定义的函数用起来也基本是性能无损的。
相关文章推荐
- [C语言]支持命名参数的函数调用
- 关于C语言中函数调用和参数传递机制的探讨
- 关于C语言中函数调用和参数传递机制的探讨(三 .传递多个参数等)
- 关于C语言中函数调用和参数传递机制的探讨
- Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
- 在调用支持可变参数格式化的函数时的一个很掩蔽问题
- 【C语言提高10】【指针铁律】铁律4:应用指针必须和函数调用相结合(指针做函数参数)
- 关于C语言中函数调用和参数传递机…
- C语言中用有参数来调用无参数函数
- 关于C语言中函数调用和参数传递机…
- 关于C语言中函数调用和参数传递机制的探讨(zz)
- 关于C语言中函数调用和参数传递机制的探讨 (转)
- 关于C语言中函数调用和参数传递机制的探讨(一 .无参数传递)
- 转载-关于C语言中函数调用和参数传递机制的探讨
- Javascript 对象方式实现命名参数调用(下):自动包装偏函数
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- 关于C语言中函数调用和参数传递机制的探讨
- 关于C语言中函数调用和参数传递机制的探讨--汇编
- 【C语言】写一个函数,只要调用一次就可以将参数的值,增加1。
- 关于C语言中函数调用和参数传递机制的探讨(ZZ)