2012-06-28 2 views
1

Я переношу некоторый (рабочий) код из Linux в Windows 8. Я использую DDK.Портирование с Linux на 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 МСВС делает не полностью поддерживает C99 ...

+0

Предположительно этот код значительно упрощен ... :) – sarnold

+0

@sarnold - я понимаю. Я хотел сказать, что Microsoft никогда не обвинялась в том, что она очень агрессивно относится к поддержке последних/лучших открытых стандартов, и, вероятно, лучший подход, как видно из вышеприведенной ссылки, «Просто отбросьте теги имени поля». IMHO ... – paulsm4

+1

Глупый я ожидаю, что они реализуют опрятную функцию только через 13 лет после того, как она будет указана. :) – sarnold

1

Похоже, что ваш компилятор не поддерживает C99 designated initializers.

Возможно, вашему компилятору требуется переключатель командной строки для включения функций C99?

Смежные вопросы