Странное использование фигурных скобок в C

Извините за простой вопрос, но я в отпуске, читаю книгу по основному звуку, и у меня нет с собой книг по C или Objective C ...

Что делают фигурные скобки в это определение переменной?

MyRecorder recorder = {0};
29
задан Shiplu Mokaddim 19 January 2013 в 08:27
поделиться

5 ответов

Предполагая, что MyRecorder является struct, этот устанавливает для каждого члена их соответствующее представление нуля (0 для целых чисел, NULL для указателей и т. Д.).

На самом деле это также работает со всеми другими типами данных, такими как int, double, указатели, массивы, вложенные структуры, ..., все, что вы можете себе представить (спасибо pmg за это!)

ОБНОВЛЕНИЕ : цитата, извлеченная из веб-сайта, указанного выше, со ссылкой на окончательный вариант C99:

[6.7.8.21] Если в списке, заключенном в фигурные скобки, меньше инициализаторов чем есть элементы или члены агрегата, [...] остальная часть агрегата должна быть неявно инициализирована так же, как объекты, которые имеют статическую длительность хранения.

24
ответ дан 28 November 2019 в 01:50
поделиться

Его инициализация всех членов recorder структуры в 0 в соответствии со стандартом C99. Может показаться, что он инициализирует каждый бит структуры с 0 битами. Но это не так для каждого компилятора.

См. Пример кода,

#include<stdio.h>

struct s {
    int i;
    unsigned long l;
    double d;
};

int main(){
    struct s es = {0};
    printf("%d\n", es.i);
    printf("%lu\n", es.l);
    printf("%f\n", es.d);
    return 0;
}

Это вывод.

$ ./a.out 
0
0
0.000000
9
ответ дан 28 November 2019 в 01:50
поделиться
4
ответ дан 28 November 2019 в 01:50
поделиться

На самом деле, он не инициализирует все элементы структуры, только первый. Но остальные автоматически инициализируются с 0, потому что это то, что стандарт C просит сделать.

Если вы установите: MyRecorder рекордер = {3};

Первый элемент будет 3, а остальные - 0.

3
ответ дан 28 November 2019 в 01:50
поделиться

MyRecorder может быть одним из следующих, и вы пытаетесь инициализировать все элементы этого с нуля

typedef struct _MyRecorder1 {
    int i;
    int j;
    int k;
}MyRecorder1;

typedef int MyRecorder2[3];
0
ответ дан 28 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: