zoukankan      html  css  js  c++  java
  • [C语言]支持命名参数的函数调用

    对于参数较多的函数,如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);
    }

    而且,相比普通函数,通过这种方式定义的函数用起来也基本是性能无损的。

  • 相关阅读:
    移动端Rem布局注意事项
    手动添加kdump
    Linux 添加新磁盘,在线扩充空间
    virtualbox linux虚拟机相关
    CentOS7 重置root密码
    putty无密码登陆
    sublime text3 安装插件
    jsp常用代码
    jq鼠标移入移除
    ajax请求超时解决方案
  • 原文地址:https://www.cnblogs.com/cbscan/p/2741817.html
Copyright © 2011-2022 走看看