Из руководства GCC:
-Wmissing-прототипы (только C и Objective-C)
Предупредить, если глобальная функция определена безпредыдущее объявление прототипа.Это предупреждение выдается, даже если само определение предоставляет прототип.Цель состоит в том, чтобы обнаружить глобальные функции, которые не могут быть объявлены в заголовочных файлах.
Clang заимствовал эту опцию для совместимости с GCC и потому, что она полезна (я бы предположил, что это разработчики Clang).
Опция существует, так что вы можете избежать частой ошибки, которой можно легко избежать.Для ясности / намерения полезно четко указывать видимость / связь.
Короче говоря, вы попросили компилятор сообщить вам, когда неполное определение не соответствует объявлению, включив эту опцию.Вы должны либо квалифицировать это как extern
и сделать его пригодным для использования другими (например, поместить его в заголовок), либо объявить его static
.Если использование C ++ inline
также является опцией.
Конечно, неявная видимость хорошо известна, но я обычно нахожу опцию полезной в этих сценариях:
1) Я сделал опечатку:
// file.h
extern void MONExceptionHandler(NSException * exception);
и
// file.m
void MONExceptionhandler(NSException * exception) {
…
2) Я должен четко указать видимость символа:
// file.m
static void MONExceptionHandler(NSException * exception) {
…
3) Я забыл #include
заголовок, которыйобъявлена функция:
// file.h
extern void MONExceptionHandler(NSException * exception);
Предупреждение:
// file.m
void MONExceptionHandler(NSException * exception) {
…
Нет Предупреждение:
// file.m
#include "file.h"
void MONExceptionHandler(NSException * exception) {
…
Итак, есть обоснование, история и некоторые примеры - опять же, -Wmissing-prototypes
- это опция .Если вы доверяете себе работать с отключенным, то сделайте это.Я предпочитаю быть явным и позволять программам обнаруживать потенциальные и реальные проблемы, чтобы мне не приходилось делать это вручную.