Відповідь 1:

typedef - це ключове слово на C, яке дозволяє створювати власні типи даних, або точніше, можна сказати, що воно створює псевдонім ім'я для іншого типу даних. Майте на увазі, що він не створює нового типу, а замість цього додає нову назву для деяких існуючих типів.

Але навіщо нам це потрібно? За допомогою typedef ви можете створити короткий і солодкий псевдонім для цього типу даних, наприклад, "цуценя", а потім написати "цуценя" замість складного типу даних кожного разу, коли ви оголошуєте змінну цього типу. Це може призвести до більш простого кодування та кращої читабельності та документування. typedef також може допомогти у переносимості вашого коду, коли типи даних залежать від машини. Під час переміщення коду з однієї машини на іншу потрібно просто змінити typedef замість кожного рядка змінної декларації, де використовується тип даних.

Приклад:

typedef unigned unt щеня;
цуценя = 10;

Випадок 1: Визначення структури без використання typedef

#include 

структура велосипеда {
    чар велосипед [20];
    ціна поплавця;
};

int main () {
    struct Bike b1; // Оголошення змінної структури
    printf ("Введіть ім'я велосипеда:");
    scanf ("% [^ \ n] s", b1.bike);
    printf ("Введіть ціну:");
    scanf ("% f", & b1.price);
    printf ("\ nІм'я велосипеда:% s", b1.bike);
    printf ("\ nЦіна:% .2f", b1.ціна);
    повернути 0;
}

Випадок 2: Визначення структури за допомогою typedef

#include 

typedef struct Велосипед {
    чар велосипед [20];
    ціна поплавця;
} Велосипед;

int main () {
    Велосипед b1; // Оголошення змінної структури
    printf ("Введіть ім'я велосипеда:");
    scanf ("% [^ \ n] s", b1.bike);
    printf ("Введіть ціну:");
    scanf ("% f", & b1.price);
    printf ("\ nІм'я велосипеда:% s", b1.bike);
    printf ("\ nЦіна:% .2f", b1.ціна);
    повернути 0;
}

Однією з переваг цього є те, що вам не потрібно писати структуру щоразу, коли ви оголошуєте змінну такого типу. Пам'ятайте, що typedef не є директивою препроцесора, тому його інтерпретацією займається компілятор, а не препроцесор на відміну від #define.

Сподіваюсь, ви усунули свої сумніви.


Відповідь 2:
Чим відрізняється структура typedef від stru в програмуванні на С?

typedef та struct - це дві окремі особливості. Просто буває так, що ви можете їх поєднати в одній декларації.

struct визначає новий тип структури, що складається зі списку членів:

Stru point {
    int x;
    int y;
};

Це визначає новий тип з назвою Stru point.

typedef не створює нового типу. Скоріше, це створює нову назву для існуючого типу.

typedef int my_int;
/ * int і my_int - імена одного типу * /

Як правило, поєднувати визначення структури з typedef, як це:

typedef структура точка {
    int x;
    int y;
} точка;

Частина „Stru point“…) створює новий тип з назвою Stru point. Обгортання цього пункту «typedef… point» створює нову точку імені для існуючої структури stru točke.

Особисто я вважаю за краще не робити цього. Тип вже має ідеально добре ім'я, структурна точка. Якщо додати ще одне ім’я, точку, просто заощаджує трохи вводити текст, що, на мій погляд, не є великою перевагою. Деякі програмісти наполягатимуть на використанні різних ідентифікаторів для тегу struct та назви typedef, хоча допустимо використовувати однакові для обох.

Я буду використовувати typedef, якщо тип має бути непрозорим, тобто код, який використовує тип, не повинен залежати від того, що це структура. Приклад цього типу FILE; це може бути визначено як структура, але код, який використовує його, не потрібно знати про це або мати можливість посилатися на своїх членів.

Звичайно, не всі програмісти C поділяють мою думку з цього приводу і вважають за краще використовувати typedef для створення імені типу, який є єдиним ідентифікатором. Вам потрібно буде мати можливість читати код, написаний у будь-якому стилі.

(У C ++ такий тип typedef не є необхідним, оскільки тип структу типу типу може називатися або точкою структури, або як точкою.)


Відповідь 3:

Стандарт мови мови C наказує окремі простори імен для різних категорій ідентифікаторів, включаючи ідентифікатори тегів (для struct / union / enum) та звичайні ідентифікатори (для typedef та інших ідентифікаторів).

typedef - це ключове слово, яке використовується мовою C для призначення альтернативних імен існуючим типам даних. Його здебільшого використовують із визначеними користувачем типами даних, коли імена типів даних стають дещо складними для використання в програмах.

синтаксис: typedef (typedef <існуюче ім'я>) (<ім'я_алісії>)

Аналогічно, коли мова йде про структуру.

Якщо ви щойно сказали:

struct Foo {...};
Foo x;

ви отримаєте помилку компілятора, оскільки Foo визначений лише у просторі імен тегів.

Вам доведеться оголосити це як:

Stru Foo x;

Кожен раз, коли ви хочете звернутися до Foo, вам завжди доведеться називати це Stru Foo. Це стає дратує швидко, тому ви можете додати typedef:

struct Foo {...};
typedef structure Foo Foo;

Тепер Stru Foo (у просторі імен тегів) та просто Foo (у звичайному просторі імен ідентифікаторів) обидва посилаються на одне і те ж, і ви можете вільно оголошувати об'єкти типу Foo без ключового слова stru.

Конструкція:

typedef struct Foo {...} Foo;

- це лише абревіатура для оголошення та typedef.

Нарешті,

typedef structure {...} Foo;

оголошує анонімну структуру та створює для неї typedef. Таким чином, для цієї конструкції він не має імені в просторі імен тегів, а лише ім'я в просторі імен typedef. Це означає, що вона також не може бути оголошена вперед. Якщо ви хочете зробити переадресацію, вам потрібно вказати її ім’я в просторі імен тегів.

У C ++ всі декларації struct / union / enum / class діють так, ніби вони неявно введені, як визначено, доки ім'я не приховано іншою декларацією з тим же ім'ям. Дивіться це посилання відповідь Майкла Берра для отримання детальної інформації.

Сподіваюся, це допоможе вам.