gcc, msvc와 구조체 초기화 차이....

kkchlove의 이미지

#define SAMPLE_FMT_NB 5;
 
enum SampleFormat {
    SAMPLE_FMT_NONE = -1,
    SAMPLE_FMT_U8,              ///< unsigned 8 bits
    SAMPLE_FMT_S16,             ///< signed 16 bits
    SAMPLE_FMT_S32,             ///< signed 32 bits
    SAMPLE_FMT_FLT,             ///< float
    SAMPLE_FMT_DBL,             ///< double
    SAMPLE_FMT_NB               ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec
};
 
/*typedef struct SampleFmtInfo {
	const char *name;
	int bits;
} SampleFmtInfo;*/
 
/*static const SampleFmtInfo sample_fmt_info[SAMPLE_FMT_NB] = {
	[SAMPLE_FMT_U8]  = { .name = "u8",  .bits = 8 },
	[SAMPLE_FMT_S16] = { .name = "s16", .bits = 16 },
	[SAMPLE_FMT_S32] = { .name = "s32", .bits = 32 },
	[SAMPLE_FMT_FLT] = { .name = "flt", .bits = 32 },
	[SAMPLE_FMT_DBL] = { .name = "dbl", .bits = 64 },
};*/

안녕하세요? 위와 같이 구조체를 초기화 해도 gcc에서는 컴파일이 잘 되는데... Visual Studio에서는 잘 안되네요...
어떻게 하면 잘 될까요?
문법이 달라도 너무 다름... ㅜㅜ

chadr의 이미지

컴파일 에러라도 올려주세요.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

grassman의 이미지

최신 버전의 Visual C가 아니라면 ANSI C 규칙대로 초기화 부분을

[ index ] = { .xxx = value1, .yyy = value2 } 

형식 대신
{ value1, value2 } 

형식으로 바꿔주는 것이 좋을 듯 합니다. (물론 enum에 선언된 순서대로 해 주어야 최종 프로그램이 오동작하지 않습니다)

그리고

#define SAMPLE_FMT_NB 5;

부분은 빼주어야 gcc에서도 정상적으로 컴파일 될 겁니다. (선언도 잘못된 데다 SAMPLE_FMT_NB는 enum에 의해 선언되기까지 합니다)

p.s [ ] 기호 쓰기 힘들군요. 몇번 수정했습니다 -_-a