Строгая типизация
C — это слабо типизированный язык, то есть компилятор разрешает такие операции, как назначение и сравнение переменных разных типов. Например, C позволяет приведения значения переменной к другому типу. Возможность использовать переменные разных типов в одном выражении способствует гибкости, а также эффективности.
Строго типизированный язык накладывает ограничения на операции между переменными разных типов. В таких случаях компилятор выдает ошибку, запрещающую операцию. Эти строгие рекомендации по типам данных предназначены для предотвращения потенциальных ошибок.
Трудность с использованием слабо типизированного языка, например C для удаленных вызовов процедур, заключается в том, что распределенные приложения могут работать на нескольких разных компьютерах с различными компиляторами C и различными архитектурами. Если приложение работает только на одном компьютере, вам не нужно беспокоиться о внутреннем формате данных, так как данные обрабатываются согласованно. Однако в распределенной вычислительной среде разные компьютеры могут использовать различные определения для их базовых типов данных. Например, некоторые компьютеры определяют тип int, поэтому его внутреннее представление равно 16 битам, а другие компьютеры используют 32 бита. Одна компьютерная архитектура, известная как "маленький эндиан", присваивает наименьшему байту данных наименьший адрес памяти и наиболее значимый байт для самого высокого адреса. Другая архитектура, известная как "большой эндиан", назначает наименьшее значение байта самому высокому адресу памяти, связанному с данными.
Для вызовов удаленных процедур требуется строгий контроль над типами параметров. Для обработки передачи данных и преобразования по сети MIDL строго применяет ограничения типа для передаваемых по сети данных. По этой причине MIDL включает набор хорошо определенных базовых типов. MIDL применяет строгое ввод, определяя использование ключевых слов, которые однозначно определяют размер и тип данных. Наиболее заметным эффектом строгого ввода является то, что MIDL не разрешает переменные типа void *.
В следующих разделах в этом разделе рассматриваются функции языка MIDL, которые обеспечивают строгое ввод данных:
- базовых типов
- подписанных и неподписанных типов
- Типы Wide-Character
- структуры
- профсоюзов
- перечислимые типы
- массивов
- атрибуты функции
- атрибутов поля
- три типа указателя
- Атрибуты типа