[Вопрос навеян потоком комментариев на этом ответе .]
Как всем известно, начиная с C99, вызывать функцию, которая не была объявлена, является ошибкой, предпочтительно справильный прототип.
Но, выходя за рамки этого, я хочу, чтобы мой компилятор предупредил меня, если я определю функцию без объявления прототипа в области видимости, предположительно включенную из того же заголовочного файла, что извонящие используют.(Если функция не является статической, в этом случае все это является спорным.)
Причина должна быть очевидна: если в заголовке есть объявление прототипа, и оно включено всеми вызывающими, но не включенов файле, где определена функция, и если фактическое определение функции каким-либо образом отличается от внешнего прототипа, то вся проверка прототипа, выполняемая от имени вызывающих, является бесполезной и фактически контрпродуктивной ошибкой.Там есть явная ошибка, но она совсем не гарантируется.
Существуют ли распространенные компиляторы, которые могут это проверить?Я пробовал gcc и clang с -Wall, а они нет.(Я полагаю, что Gimpel lint - если он все еще рядом - сделал бы это, но у меня нет копии.)
В идеале, я бы хотел, чтобы он также настаивал на том, что прототип существует вотдельный заголовочный файл, но это другой чайник рыбы, поэтому я не настаиваю на этом.(Причиной этого дополнительного условия может быть то, что некоторые программисты, обеспокоенные гипотетическим предупреждающим сообщением, могут попытаться заставить его замолчать, введя внешний прототип в верхней части файла .c
, содержащего определение, что опять-таки приведет к поражениюцель.)