Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > инициализация экземпляра структуры


Автор: slater 22.10.2010, 19:09
здраствуйте

очень часто приходится видеть(особенно в исходном коде ядра linux) следующее объявление экземпляра структуры с начальным присвоением значений
например:

Код

#include <string.h>

struct my_struct {
    char* str;
    int      size;
};

int main() {

    char string[] = "hello, vingrad";
    struct my_struct hello {
        .str   = string,
        .size = strlen(string),
    };
    return 0;
}


логически как бы все верно, но в литературе об этом не писано(
но с другой стороны, если я начну такое юзать в своей программе - то не соберется - на синтаксис ругается

вопрос: что это? где более подробно прочесть? и как мне такое использовать

P.S. подозреваю, это какая то фича самого gcc)

Автор: boostcoder 22.10.2010, 20:10
Цитата(slater @  22.10.2010,  19:09 Найти цитируемый пост)
подозреваю, это какая то фича самого gcc) 

угу.

Автор: djamshud 22.10.2010, 22:31
http://tinyurl.com/25nd9pc

Добавлено через 2 минуты и 12 секунд
Ну а чтобы включить, нужно использовать гнутый --std (см ман).

Автор: xido 25.10.2010, 09:22
Это фича из последнего стандарта C. Поддерживается пока не всеми, gcc один из тех кто поддерживает (возможно ранее это была чисто его фишка). 

Автор: slater 25.10.2010, 09:56
ребята, спасиобо за советы

так какой именно флаг надо указать при компиляции что бы это поддерживалось

-std????

Автор: xido 25.10.2010, 11:26
std99 кажется. 
Но вообще по моему оно по умолчанию работает, разве нет (может надо выключить какой-нибудь pedantic   )?

Автор: djamshud 25.10.2010, 11:30
Хм. Попробовал. Во-первых, нужно писать:

Код

struct my_struct hello ={
        .str   = 0,
        .size = 0,
    };


Во-вторых, это заработало только в С. В С++ можно так:

Код

    struct my_struct hello = {
        str:0,
        size:0,
    };

Автор: xido 25.10.2010, 11:44
А при чем тут плюсы? Речь идет про C.

Автор: djamshud 25.10.2010, 11:49
Не нашел, где бы было сказано про чистый С, поэтому сделал поправку и на плюсы. Что касается варианта С, я в нем сделал исправление. Кто-то знак равенства пропустил.

Автор: slater 25.10.2010, 14:51
спасибо ребята, вопрос решен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)