Контроль типов
lint, по сравнению с C-компилятором, выполняет более строгий контроль типов. Дополнительный контроль затрагивает четыре основные области:
- Согласование типов в некоторых бинарных операциях и присваиваниях.
- Операции выбора элементов структур и объединений.
- Соответствие определения и использований функций.
- Использование перечислимых типов.
Некоторые операции выполняют определенные преобразования, приводящие в соответствие типы операндов. Этим свойством обладают присваивания, условная операция (?:) и операции отношения. Аргумент оператора return и выражения, используемые для инициализации, допускают аналогичные преобразования. В этих конструкциях типы char, short, int, long, unsigned, float и double можно без ограничений смешивать. Указательные типы должны в точности согласовываться, конечно же, за исключением того, что массивы x
можно смешивать с указателями на x.
Правила контроля типов требуют, чтобы при работе со структурами левый операнд операции -> являлся указателем на структуру, ле- вый операнд операции . - структурой, а правый операнд этих операций - элементом, предусмотренным для структурного типа, соответствующего левому операнду. Аналогичные проверки выполняются при работе с объединениями.
Контролируется соответствие типов аргументов функций и возвращаемых значений. Без ограничений сопоставляются типы float и double, так же, как и типы char, short, int и unsigned. Аналогично, указатели могут сопоставляться с соответствующими массивами. Во всех остальных случаях типы фактических аргументов должны согласовываться с описаниями соответствующих им формальных.
Для перечислимых типов контролируется, что переменные и значения таких типов не употребляются вместе с переменными других типов, в том числе и перечислимых, и что единственные операции, к ним применяемые, - это =, инициализация, ==, !=, передача в качестве фактических аргументов и возврат в качестве результата функции.
Если требуется отключить строгий контроль типов в конкретном выражении, в исходный текст программы непосредственно перед этим выражением нужно добавить комментарий
/* NOSTRICT */
Данный комментарий отменяет строгий контроль типов только в следующей строке программы.