구조체 초기화 멤버 접근방식

bloody의 이미지

리눅스에서 사용되는 소스코드인데요 윈도우즈로 가져오니 에러가 나네요

아래와 같이 선언된 구조체에서

typedef struct OptionDef {
    const char *name;
    int flags;
     union {
        void *dst_ptr;
        int (*func_arg)(void *, const char *, const char *);
        size_t off;
    } u;
    const char *help;
    const char *argname;
} OptionDef;

초기화 시킬때 아래와 같이 .fuc_arg라고 해서 멤버변수를 지정해서 초기화 시켜주고 있는데요
const OptionDef options[] = {
{ "vcodec",			OPT_VIDEO,	{ .func_arg = opt_video_codec },	"force video codec ('copy' to copy stream)", "codec"	},
...
};

VS2008을 사용하는데 위 .func_arg 라는 부분에서 에러가 나네요
VC++에서는 저런 문법이 없나보죠???

어떻게 해결해야 할까요?

klara의 이미지

designated initializer라고 C++에는 없고 C는 C99이상의 표준을 지원하는 컴파일러라면 가능합니다.
MSDN 블로그(http://blogs.msdn.com/b/somasegar/archive/2013/06/28/cpp-conformance-roadmap.aspx)에서 말하길 "C99 designated initializers will be supported in VC++ 2013 RTM"라고 하니까 2008에서는 지원이 안되겠네요.
원래 VC++이 표준 지원이 매우 늦습니다. C99면 이름 그대로 99년에 나온 표준인데 2013에서나 지원하는군요.