Найти в Дзене
D21nk Master

Так можно язык программирования превратить в матерный

Не так давно я поделился с вами о том,как создавать и пользоваться структурами.Но далеко не всем по душе каждый раз при объявлении нового элемента структуры писать слово "struct".Предлагаю вам начать пользоваться алиасами,или псевдонимами. Мы ранее уже ими пользовались,а именно #define мог выступать в качестве алиасов.Да,с его помощью можно заменить абсолютно все конструкции языка. Давайте побалуемся и попробуем собрать следующий код: #include <stdio.h> #define start { #define end } #define __main__ int main() #define finish return 0 __main__ start int a=10; printf("%d\n",a); finish; end Если сохранить все эти #define в отдельный файл и подключать его-то при работе с таким кодом си вовсе не узнать.Конечно же изменить можно всё,что касается языка.И если вы когда-нибудь знакомились с winapi-то наверняка заметили,что многие типы переопределены.Так к примеру для типа BOOL в winapi используется просто int. Если вы не знаете что это за тип данных-он хранит как правило два

Не так давно я поделился с вами о том,как создавать и пользоваться структурами.Но далеко не всем по душе каждый раз при объявлении нового элемента структуры писать слово "struct".Предлагаю вам начать пользоваться алиасами,или псевдонимами.

Мы ранее уже ими пользовались,а именно #define мог выступать в качестве алиасов.Да,с его помощью можно заменить абсолютно все конструкции языка.

Давайте побалуемся и попробуем собрать следующий код:

#include <stdio.h>

#define start {

#define end }

#define __main__ int main()

#define finish return 0

__main__

start

int a=10;

printf("%d\n",a);

finish;

end

Если сохранить все эти #define в отдельный файл и подключать его-то при работе с таким кодом си вовсе не узнать.Конечно же изменить можно всё,что касается языка.И если вы когда-нибудь знакомились с winapi-то наверняка заметили,что многие типы переопределены.Так к примеру для типа BOOL в winapi используется просто int.

Если вы не знаете что это за тип данных-он хранит как правило два значения,истина и ложь.В си к сожалению данного типа нет,но если сравнивать в c++ - там тип bool занимает 1 байт,тут же целыйх 4.Использовать 4,3 миллиарда чисел для двух значение-неслыханное расточительство,потому в следующем уроке мы это исправим.

Но вернёмся к нашим алиасам,#define хорош,к сожалению его нельзя использовать для структуры.Поэтому в си имеется ещё один способ создания алиасов.

typedef используется для создания алиасов только для типов данных.То есть с его помощью нельзя изменить полностью синтаксис,но нам это особо и не нужно.

Создание алиаса с typedef:

//слово typedef,что хотим изменить,алиас

typedef unsigned short ushort

Ребята,которые проектировали структуры, понимали,что с этим надо что-то делать,потому структуры с алиасом можно создавать так:

struct name

{

char *name;

}typedef sname;

Или так:

struct

{

char *name;

}typedef sname;

В первом случае остаётся возможность инициализация структуры через struct name,собственно,как и с алиасом.Во втором случае только так:

int main()

{

//достаточно только алиаса

sname hello;

hello.name="Hello";

printf("%s\n",hello.name);

return 0;

}

Структуры в си могут стать не менее мощным инструментом,чем функции в си.Поэтому мы ещё продолжим их разбор,у меня ещё есть несколько фишек с ними,о которых многие новички даже не догадываются.

Домашнее задание:переписать программу по структурированию одноклассников/коллег/сокурсников с алиасом.

С вами был D21nkMaster.Всего доброго!