Не могу понять синтаксис объявлений компактной структуры - PullRequest
1 голос
/ 26 января 2010

Ни один из этих фрагментов кода не работает:

int main() {
    struct mystruct {
        int a;
        char* b;
        char* c;
    } e,f;
    e = {5, "blaat", "boe"};

    return 0;
}

Ошибка: синтаксическая ошибка для токена '{'

int main() {
    struct mystruct {
        int a;
        char* b;
        char* c;
    } e,f;
    struct mystruct e = {5, "blaat", "boe"};

    return 0;
}

Ошибка: предыдущее объявление 'e' было здесь

Что является правильным способом сделать это?

Ответы [ 5 ]

4 голосов
/ 26 января 2010

Составное буквенное присвоение является новым с C99, и синтаксис будет

e = (struct mystruct) {5, "blaat", "boe"};

Требуется приведенное выражение.

В C89 вы должны либо инициализировать e как часть объявления:

struct mystruct {int a; char *b; char *c} e = {5, "blaat", "boe"};

или

struct mystruct e = {5, "blaat", "boe"};

или вы должны назначить членов индивидуально:

struct mystruct e;
e.a = 5;
e.b = "blaat";
e.c = "boe";
2 голосов
/ 26 января 2010
int main() {
    struct mystruct {
        int a;
        char* b;
        char* c;
    } f;
    struct mystruct e = {5, "blaat", "boe"};

    return 0;
}
1 голос
/ 26 января 2010
e = {5, "blaat", "boe"};

Это может только быть выполнено во время инициализации, и, поскольку вы уже инициализировали 'e' как часть своего объявления структуры, вы не можете выполнить его. Я рекомендую метод Нейла .

0 голосов
/ 26 января 2010

Это работает:

int main() {
    struct mystruct {
        int a;
        char* b;
        char* c;
    } e = {5, "blaat", "boe"}, f;

    return 0;
}
0 голосов
/ 26 января 2010

Или инициализируйте участников за один раз, как показано ниже:

int main() {
struct mystruct {
    int a;
    char* b;
    char* c;
} f;
  struct mystruct e = {5, "blaat", "boe"};

  return 0;
}    

или присвойте им значения позже, как показано ниже:

int main() {
 struct mystruct {
    int a;
    char* b;
    char* c;
 }e,f;

 /* a,b,c are initialized with unknown values */

   e.a=5; /*Assignment instead of initialization*/
   e.b="blaat";
   e.c="boe";

   return 0;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...