以下代码编译通过也能正常运行,但编译器会在第一行显示警告。警告为:
'extern' variable has an initializer。// 'extern'变量初始化
// main.m
extern int var = 10;
int main(void)
{
var = 10;
return 0;
}
目前对extern的认识是:它是会声明一个工程内全局共享变量,但不给予实现,也就是不会为其申请内存,等到定义时才会申请内存空间。
正常的使用方法如下:
// .h
extern int var;
// .m
int var = 10;
我的认识是:警告的原因是extern是设计用来声明一个变量或方法,并未涉及定义。但语法也是允许定义为其分配内存空间。
问题是:
设计成错误和警告的界限应该是警告代表编译通过,但运行时是否发生错误就不确定了,可能崩溃也可能不崩溃。错误那就是显而易见的无法通过编译。那么编译出现警告的原因都有哪些呢?(貌似这个问题蛮大的,提出来就是想讨论总结下)
目前已知的 Xcode编译出现警告的原因:
API is deprecated
类型问题。 比如应传入NSInteger类型,但传入的是NSObject类型。
还有上面的这个例子,但这属于什么类型的编译警告呢?语法不推荐吗?
針對所有語言的編譯警告
在Target->Build Settings->搜尋GCC(搜尋框左邊記得選All)
往下翻還可以看見針對各個語言的警告
有關於開啟警告查看喵神的blog
消除警告簡書地址
歡迎大家補充!