Операционная система UNIX. Руководство программиста

     

Контроль типов


lint, по сравнению с C-компилятором, выполняет более строгий контроль типов. Дополнительный контроль затрагивает четыре основные области:

  • Согласование типов в некоторых бинарных операциях и присваиваниях.
  • Операции выбора элементов структур и объединений.
  • Соответствие определения и использований функций.
  • Использование перечислимых типов.

Некоторые операции выполняют определенные преобразования, приводящие в соответствие типы операндов. Этим свойством обладают присваивания, условная операция (?:) и операции отношения. Аргумент оператора return и выражения, используемые для инициализации, допускают аналогичные преобразования. В этих конструкциях типы char, short, int, long, unsigned, float и double можно без ограничений смешивать. Указательные типы должны в точности согласовываться, конечно же, за исключением того, что массивы x

можно смешивать с указателями на x.

Правила контроля типов требуют, чтобы при работе со структурами левый операнд операции -> являлся указателем на структуру, ле- вый операнд операции . - структурой, а правый операнд этих операций - элементом, предусмотренным для структурного типа, соответствующего левому операнду. Аналогичные проверки выполняются при работе с объединениями.

Контролируется соответствие типов аргументов функций и возвращаемых значений. Без ограничений сопоставляются типы float и double, так же, как и типы char, short, int и unsigned. Аналогично, указатели могут сопоставляться с соответствующими массивами. Во всех остальных случаях типы фактических аргументов должны согласовываться с описаниями соответствующих им формальных.

Для перечислимых типов контролируется, что переменные и значения таких типов не употребляются вместе с переменными других типов, в том числе и перечислимых, и что единственные операции, к ним применяемые, - это =, инициализация, ==, !=, передача в качестве фактических аргументов и возврат в качестве результата функции.

Если требуется отключить строгий контроль типов в конкретном выражении, в исходный текст программы непосредственно перед этим выражением нужно добавить комментарий

/* NOSTRICT */

Данный комментарий отменяет строгий контроль типов только в следующей строке программы.



Содержание раздела