2012-06-28 6 views
1

리눅스에서 Windows 8로 일부 (작동중인) 코드를 이식하고 있습니다. DDK를 사용하고 있습니다.리눅스에서 Windows 8로 이식하기 : 구조체 멤버 이름

typedef struct { 
    unsigned int test1; 
    unsigned int test2; 
} settings; 

const settings vp_settings = { 
    .test1 = 1, 
    .test2 = 1 
}; 

Windows DDK 컴파일러와 GCC가이 내용을 무효로하는 점은 무엇이 다른가요? typedef struct { 가정 내가 갖는 오류, 줄 1이고 번호는 정상적으로 계속 :

(7) : error: C2059: syntax error : '.'

어떻게 더 구문 오류가 없을 것 같은 방법이 쓸 수? 동일한 멤버 이름을 유지하여 나머지 코드베이스를 변경할 필요가 없습니다. 그 기간은 불필요하며 제거 될 수 있습니까?

답변

2

Q : (바닐라)으로 잘못의 새로운 기능 :

const settings vp_settings = { 
    1, /* test1 */ 
    1 /* test2 */ 
}; 

PS :

How to rewrite C-struct designated initializers to C89 (resp MSVC C compiler)

이것은 C99 것 같습니다 ... 그리고 AFAIK MSVS이 수행하지 완전히 C99를 지원 ...

+0

아마도이 코드는 대폭 단순화되었습니다 ... :) – sarnold

+0

@sarnold - 이해합니다. 저의 요점은 Microsoft가 최신/가장 뛰어난 개방형 표준을 지원하는 것에 대해 매우 공격적이라고 비난받은 ​​적이 결코 없었습니다. 위의 링크에서 "필드 이름 태그 만 삭제"하는 것이 가장 좋은 방법 일 것입니다. IMHO ... – paulsm4

+1

어리석은 그들이 그것이 정해지고 난 후에 단지 13 년 만에 그들이 청초한 특징을 실행하기를 바란다. :) – sarnold

1

컴파일러가 C99 designated initializers을 지원하지 않는 것 같습니다.

아마도 컴파일러에서 C99 기능을 사용하려면 명령 줄 스위치가 필요합니까?