Извините за простой вопрос, но я в отпуске читаю книгу по основному аудио, и у меня нет моих книг C или Objective C со мной...
Каковы фигурные скобки, выполняемые в этом определении переменной?
MyRecorder recorder = {0};
Извините за простой вопрос, но я в отпуске читаю книгу по основному аудио, и у меня нет моих книг C или Objective C со мной...
Каковы фигурные скобки, выполняемые в этом определении переменной?
MyRecorder recorder = {0};
Предполагая, что MyRecorder
является struct
, этот устанавливает каждый член в соответствующее представление нуля (0
для целых чисел, NULL
для указателей и т.д.).
На самом деле это также работает со всеми другими типами данных, такими как int
, double
, указатели, массивы, вложенные структуры,..., все, что вы можете себе представить (благодаря pmg для указания этого!)
UPDATE: цитата, извлеченная из связанного выше сайта, ссылаясь на окончательный вариант C99:
[6.7.8.21] Если в списке, заключенном в фигурные скобки, меньше инициализаторов чем есть элементы или члены совокупности, [...] остальная часть совокупность должна быть неявно инициализирована так же, как объекты, которые имеют статическую продолжительность хранения.
Инициализация всех элементов структуры 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
Собственно, он не инициализирует все элементы структуры, а только первую. Но, остальные автоматически инициализируются с помощью 0, потому что это то, что просят выполнить стандарт C.
Если вы ставите: MyRecorder recorder = {3};
Первый элемент будет 3, а остальные будут равны 0.
MyRecorder
может быть одним из следующих, и вы пытаетесь инициализировать все элементы этого с нулем
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];