Шрифт:
Рассмотрим следующий пример:
К сожалению, это определение в другом исходном файле может выглядеть следующим образом:
Редактор связей не сообщит об этой ошибке. Вместо этого вы получите ошибку на этапе выполнения программы или случайный результат.
Вы можете попросить включить проверку аргументов функций в языке С. Для этого достаточно объявить функцию с заданными типами аргументов (точно так же, как в языке С++). Такое объявление называется прототипом функции (function prototype). Тем не менее следует избегать объявлений, не задающих аргументы; они не являются прототипами функций и не включают механизм проверки типов.
Существует специальный набор правил, регламентирующих преобразование аргументов, если в области видимости нет прототипа функции. Например, переменные типов
Обратите внимание на то, что, хотя компилятор допускает передачу аргументов неправильного типа, например параметр типа
27.2.3. Определения функций
Можете определять функции точно так же, как в языке С++. Эти определения являются прототипами функций.