有没有更好的方法来做c命名参数?

Rom*_*her 6 c named-parameters

我正在尝试实现灵活的调试宏/函数库,而命名/可选参数似乎是实现这些函数的最佳方式.

有没有更好的方法在c中进行命名参数然后如下?

enum named_args {NAME,ADRESS,AGE,NA_SENTINEL};

void named_arg_initializers(struct person p, enum * named_args)
{
    enum named_args * current_name;
    enum named_args * current_arg;
    ...
    if(named_args==NULL)
        return;
    current_name = named_args[0];
    current_arg = named_args[1];
    while(current_name!=NA_SENTINEL)
    {
        current_name+=2;
        current_arg+=2;
        if(current_name==NAME)
            p.name=current_arg;
        else if(...
        ...
        }
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Jen*_*edt 21

当然.

struct toto {
  unsigned age;
  char name[25];
};

void func(struct toto);

...

func((struct toto){ .name = "you", .age = 18 });
Run Code Online (Sandbox Code Playgroud)

或者如果你想要你可以将它包装在一个宏中

#define FUNC(...) func((struct toto){ __VA_ARGS__ })
...
FUNC(.name = "you", .age = 18 );
Run Code Online (Sandbox Code Playgroud)

  • @Roman,你的意思是"只有C99".C99是现在12年以来的标准.是的,C中的所有初始化都将省略的字段放入"0".只需将此文档记录为"0"有效的字段的默认值:) (5认同)
  • @Jens:是的,我知道.关键在于这只是C99的唯一答案,因此有理由指出这一点,因为使用Microsoft编译器编程C的人无法使用它. (3认同)