根据海湾合作委员会手册:
-Wmissing-prototypes (C and Objective-C only)
如果在没有先前的原型申报的情况下界定全球功能,则警告。 即使定义本身提供了原型,也发出这一警告。 目的是发现全球功能,这些功能无法在标题档案中申报。
Clang为海合会的兼容性而借用了这一选择,因为这样做是有益的(我将假定Clang devs就是这样)。
这种选择是存在的,因此,你可以防止 yourself犯可能轻易避免的共同错误。 为了明确/明确起见,它需要明确可见/联系。
In short, you ve asked the compiler to tell you when an unqualified definition does not match a declaration by enabling this option. You should either qualify that as extern
and make it usable to others (e.g. put it in a header), or declare it static
. If using C++ inline
is also an option.
当然,含蓄的可见度是众所周知的,但我通常认为,在这种情景中,这种选择是有用的:
1) I made a typo:
// file.h
extern void MONExceptionHandler(NSException * exception);
and
// file.m
void MONExceptionhandler(NSException * exception) {
…
2) I should be explicit about the symbol s visibility:
// file.m
static void MONExceptionHandler(NSException * exception) {
…
3) I forgot to #include
the header which declared the function:
// file.h
extern void MONExceptionHandler(NSException * exception);
警告:
// file.m
void MONExceptionHandler(NSException * exception) {
…
No 警告:
// file.m
#include "file.h"
void MONExceptionHandler(NSException * exception) {
…
因此,有理性、历史和一些实例——再一次,-Wmissing-prototypes
是option<>。 如果你相信自己会残疾,那么就这样做了。 我倾向于明确,让方案能够发现潜在和实际问题,因此我无需人工处理。