typedef
Писать struct product при каждом создании переменной — слишком много набирать. А если забыть слово struct, как в product bread = {"Bread", 32.5, 2};, программа не скомпилируется:
main.c:10:5: error: must use 'struct' tag to refer to type 'product'
10 | product bread = {"Bread", 32.5, 2};
| ^
| structВ C имя структуры работает только вместе со словом struct. С помощью ключевого слова typedef (сокращение от type definition, «определение типа») можно дать типу собственное имя. Напишите typedef перед struct, а новое имя — после закрывающей фигурной скобки:
typedef struct {
char name[20];
double price;
int count;
} Product;Теперь тип называется просто Product, и переменные этого типа создаются так же, как переменные int:
Product bread = {"Bread", 32.5, 2};
Product milk = {"Milk", 24.9, 3};Имя после struct больше не нужно: у структуры теперь есть имя Product из typedef. Многие программисты начинают имена типов с заглавной буквы, чтобы отличать их от переменных, и этот курс делает так же: Product — тип, а bread и milk — переменные. Не забудьте точку с запятой после нового имени.
Дальше в этом курсе структуры записываются с typedef. В других программах вы увидите обе формы, а иногда их объединяют: после typedef struct product { ... } Product; работают и struct product, и Product.
Обратите внимание на одну вещь: у структуры, определённой так через typedef, нет имени после struct, поэтому struct Product bread не работает. Ошибка не очень понятная:
main.c:10:20: error: variable has incomplete type 'struct Product'
10 | struct Product bread = {"Bread", 32.5, 2};
| ^Неполный тип (incomplete type) — это тип, который компилятор знает только по имени, без его полей. Из-за слова struct он ищет структуру с именем struct Product, а такой нет. Уберите struct и пишите просто Product bread.
Задание
- 1
Перепишите структуру через
typedefтак, чтобы тип называлсяSong, и создайте обе переменные какSong. Программа выведет те же две строки, что и раньше. - 2
Ниже переменной
secondсоздайте третью песнюthirdтипаSongс названиемLast Bus Homeи длиной251секунда. Выведите её так же, ниже двух других. Последняя строка:Last Bus Home: 4 мин 11 с.