[완료] C99 스타일을 C89 로 포팅하기에서...

홍태의 이미지

static struct {
    uint8_t  le;
    uint8_t  bits;
    uint32_t poly;
} av_crc_table_params[AV_CRC_MAX];
= {
    [AV_CRC_8_ATM]      = { 0,  8,       0x07 },
    [AV_CRC_16_ANSI]    = { 0, 16,     0x8005 },
    [AV_CRC_16_CCITT]   = { 0, 16,     0x1021 },
    [AV_CRC_32_IEEE]    = { 0, 32, 0x04C11DB7 },
    [AV_CRC_32_IEEE_LE] = { 1, 32, 0xEDB88320 },
};

안녕하세요,

위와 같은 소스가 있는데요 C99 standard 를 지원하는 컴파일러로는 잘 컴파일이 되는데 그렇지 않은
컴파일러는 에러를 내며 컴파일이 안돼서요...

C89 스타일로 위의 내용을 바꾸려면 어떻게 해야하는지 궁굼합니다.

kslee80의 이미지

[AV_CRC_8_ATM] = {...} 과 같은 문법이 C89 에서 지원하지 않는 것일 겁니다.

고치는 방법은 av_crc_table_params 뒤에 AV_CRC_MAX 갯수만큼의 초기값을 적어주어야 겠죠.

예를 들어서, AV_CRC_8_ATM 이 1 이고, AV_CRC_16_ANSI 가 3 이면,

static struct {
    uint8_t  le;
    uint8_t  bits;
    uint32_t poly;
} av_crc_table_params[AV_CRC_MAX];
= {
    { 0,  0,       0},                  /* dummy */
    { 0,  8,       0x07 },        /* AV_CRC_8_ATM */
    { 0,  0,       0},                   /* dummy */
    { 0, 16,      0x8005 },    /* AV_CRC_16_ANSI */
    ...(생략)...
};

같은 식으로 AV_CRC_MAX 갯수만큼 일일이 다 적어 주어야 합니다.
홍태의 이미지

답변 감사합니다.

가르쳐 주셔서 고맙습니다~