Строгая типизация

C является слабо типизированным языком, то есть компилятор допускает такие операции, как назначение и сравнение, между переменными разных типов. Например, C позволяет привести значение переменной к другому типу. Возможность использовать переменные разных типов в одном выражении повышает гибкость и эффективность.

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

Сложность использования слабо типизированного языка, такого как C, для удаленных вызовов процедур заключается в том, что распределенные приложения могут выполняться на нескольких разных компьютерах с разными компиляторами C и разными архитектурами. Если приложение выполняется только на одном компьютере, вам не нужно беспокоиться о внутреннем формате данных, так как данные обрабатываются согласованно. Однако в распределенной вычислительной среде разные компьютеры могут использовать разные определения для своих базовых типов данных. Например, некоторые компьютеры определяют тип int , поэтому его внутреннее представление составляет 16 бит, в то время как другие компьютеры используют 32 бита. Одна архитектура компьютера, известная как "маленький байт", назначает наименьший байт данных наименьшему адресу памяти, а самый значительный байт — самому высокому адресу. Другая архитектура, известная как "большой байт", назначает наименьший значимый байт наибольшему адресу памяти, связанному с данными.

Удаленные вызовы процедур требуют строгого контроля над типами параметров. Для обработки передачи и преобразования данных по сети MIDL строго применяет ограничения типов для данных, передаваемых по сети. По этой причине MIDL включает набор четко определенных базовых типов. MIDL обеспечивает строгую типизацию, требуя использовать ключевые слова, которые однозначно определяют размер и тип данных. Наиболее заметным эффектом строгой типизации является то, что MIDL не разрешает переменные типа void *.

В следующих разделах в этом разделе рассматриваются функции языка MIDL, которые обеспечивают строгую типизацию данных: