* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Соглашения об именах
23 февраля 2009

Первые библиотеки сокетов писались на языке С. В этом языке идентификаторы чувствительны к регистру символов, т.е., например, SOCKET, Socket и socket - это разные идентификаторы. Исторически сложилось, что имена встроенных в С типов данных пишутся в нижнем регистре, имена определённых в программе типов, макроопределений и констант - в верхнем, имена функций - в смешанном (большие буквы выделяют начала слов, например, GetWindowText). Разработчики библиотеки сокетов несколько отошли от этих правил: имена всех стандартных сокетных функций пишутся в нижнем регистре. К счастью, мы программируем не на С, а на Паскале, нечувствительном к регистру символов, поэтому будем писать все идентификаторы в виде, наиболее удобном для чтения, т.е. в смешанном регистре.
Чувствительность C к регистру символов создаёт некоторые проблемы при переносе библиотек, написанных на этом языке, в Delphi. Эти проблемы связаны с тем, что разные объекты могут иметь имена, различающиеся только регистром символов. В частности, есть тип SOCKET и функция socket. Сохранить эти имена в Delphi возможности нет. Чтобы избежать эту проблему, разработчики Delphi при переносе библиотек к имени типа добавляют букву "T", причём независимо от того, существуют ли у этого типа одноимённые функции или нет. Так, тип SOCKET в С в Delphi называется TSocket. Имена функций остаются без изменений.
Выше был упомянут термин "макроопределение". Он может быть непонятен тем, кто не работал с языками C и C++, потому что в Delphi макроопределения отсутствуют. Нормальная последовательность трансляции программы в Delphi следующая: сначала компилятор создаёт объектный код, в котором вместо реальных адресов функций, переменных и т.п. стоят ссылки на них (на этапе компиляции эти адреса ещё неизвестны). Затем компоновщик размещает объекты в памяти и заменяет ссылки реальными адресами. Так получается готовая к исполнению программа. В C/C++ трансляция включает в себя ещё один этап: перед компилятором текст программы модифицируется препроцессором, а компилятор получат уже изменённый текст. Макроопределения, или просто макросы, - это директивы препроцессору, предписывающие ему, как именно нужно менять текст программы. Макрос задаёт подмену: везде, где в программе встречается имя макроса, препроцессор изменяет его на тот текст, который задан при определении этого макроса. Определяются макросы с помощью директивы препроцессору "#define".
В простейшем случае макросы используются для определения констант. Например, директива "#define SOMECONST 10" вынуждает препроцессор заменять SOMECONST на 10. Для компилятора эта директива ничего не значит, идентификатора SOMECONST для него не существует. Он получит уже изменённый препроцессором текст, в котором на местах упоминания SOMECONST будет стоять 10. Допускается также создавать параметризованные макросы, которые изменяют текст программы по более сложным правилам.
Макросы позволяют в некоторых случаях существенно сократить программу и повысить её читабельность. Тем не менее, они считаются устаревшим средством, т.к. их использование может привести к существенным проблемам (обсуждение этих проблем выходит за рамки данной статьи; если кому это интересно - задавайте вопросы ниже, в обсуждении статьи, и я отвечу). В современных языках от использования макросов отказываются. В частности, в C++ макросы поддерживаются в полном объёме, но использовать их не рекомендуется, т.к. есть более безопасные инструменты, решающие типичные для макросов задачи. В C# и Java макросы отсутствуют. Тем не менее, в заголовочных файлах для системных библиотек Windows (в т.ч. и библиотеки сокетов) макросы широко используются, т.к. требуется обеспечить совместимость с языком C. При портации таких файлов в Delphi макросы без параметров заменяются константами, а макросы с параметрами - функциями (иногда один макрос приходится заменять несколькими функциями для разных типов данных).


Теги: SOMECONST, C++, макросы, define, Delphi, TSocket, GetWindowText, socket Borland Delphi

Статьи по теме:

Получение почтового ящика
Свойство Expression для TQRExpr
Компонент TQRMemo
Информация о протоколе
Основы CLS
Использование выражений
Свойство Shape
Version
TryExclusive
Свойство Available
Подсказки в Delphi
Событие OnEndPage
ДОБАВЛЕНИЕ ВОЗМОЖНОСТЕЙ РЕДАКТИРОВАНИЯ
Общая тенденция развития систем делопроизводства и документооборота
AbsolutePath
| Borland Delphi | Alex |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | Borland Delphi | Соглашения об именах. Регион сайта: Москва и Санкт-Петербург