Инициализация структуры - PullRequest
0 голосов
/ 20 ноября 2010

gcc 4.5.1 c89

компиляция со следующими флагами: -Wall, -Wextra

У меня есть следующая структура, которую я пытаюсь инициализировать значениями по умолчанию. Тем не менее, я получаю следующие предупреждения:

static struct Device {
    char *name;
    char *config;
} *app = { NULL, NULL };

Предупреждения:

warning: initialization from incompatible pointer type
warning: excess elements in scalar initializer

Однако, если я сделаю следующее, объявив не указатель, у меня не возникнет никаких проблем, т.е.

 static struct Device {
        char *name;
        char *config;
    } app = { NULL, NULL };

Почему это?

Большое спасибо за любой совет,

Ответы [ 3 ]

2 голосов
/ 20 ноября 2010

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

  • Если ваша переменная app имеет тип указателя, она может быть инициализирована с NULL, но не сиспользуемый вами синтаксис фигурных скобок
  • Если переменная app имеет тип struct Device, вы можете использовать инициализатор фигурных скобок для предоставления начального значения NULL для полей name и config
2 голосов
/ 20 ноября 2010

, поскольку * app является указателем, поэтому инициализация его {NULL, NULL} неверна, вы должны инициализировать его просто NULL.

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

2 голосов
/ 20 ноября 2010

Вы не можете инициализировать указатель таким образом. Вы можете сделать это, хотя:

static struct Device {
    char *name;
    char *config;
} *app = NULL;

Инициализировать указатель на NULL. Указатель - это не что иное, как адрес памяти. Вы не можете присвоить { NULL, NULL } адресу памяти.

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