* При перепечатке материалов ссылка на 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

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

Метод PrintBackground
Свойство Exporting
Свойство AutoSize
Характеристика и назначение информационных технологий обработки данных
Дополнительные функции
Асинхронный режим, основанный на сообщениях
DbfFieldDefs
Метод Print
OnCopyDateTimeAsString
Свойство ExportFilter
Событие BeforePrint для Bands
Географические информационные системы (Geographical Information System)
Размер стека
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 31


     



Rambler's Top100

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

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