注意,我的開發環境是Xcode 4.2並使用Clang(LLVM)編譯器3.0版。Apple應該不太可能再回到GCC了,所以就不管了。
首先,可利用#warning會產生警告訊息,但還是能通過編譯建置成功。譬如說底下的程式碼:
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
#warning need to do some cleanup
}
編譯後就會出現在Issue Navagator裡。
撰寫程式碼時,有時候會突然想到當下無法處理的東西、或是想做個記號留待之後再處理,此時就可以用#warning。
但若改成#error的話,就會是錯誤訊息,通不過編譯建置。
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
#error need to do some cleanup
}
程式越寫越多,要怎麼分類管理呢?此時可以利用#pragma mark。譬如說如下的程式碼:
#pragma mark - Something Stupid
-(void)stupidA
{
}
-(void)stupidB
{
}
#pragma mark Something Smart
-(void)smartA
{
}
-(void)smartB
{
}
@end
Xcode的編輯器解析之後,就能呈現出如下的結果。
其中,在mark的後面若是減號「-」的話,就會有一條分隔線。然後秀出後面的文字。可利用#pragma將方法分門別類,找起來就輕鬆多了。
不僅如此,我們還能用MARK:、TODO:、FIXME:、!!!:、???:作更進一步的劃分,譬如說:
#pragma mark - Something Stupid
// MARK: markmarkmark
// TODO: todotodotodo
-(void)stupidA
{
}
// FIXME: fixmefixmefixme
-(void)stupidB
{
}
#pragma mark Something Smart
// ???: ?????????
-(void)smartA
{
}
/// !!!: !!!!!!!!!
-(void)smartB
{
}
呈現效果如下:
比較常用的是TODO:跟FIXME:。在開發時難免忘東忘西,若能直接在程式碼裡寫下來,這樣不是很棒嗎?
編譯器很聰明地幫我們找出有宣告卻沒使用的變數,並且吐出警告訊息,一般來說這是我們想要的,但在極少數的情況下,我們可能希望編譯器不要這麼煩人,此時可利用#pragma unused:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
int x;
#pragma unused (x)
}
這麼一來,編譯器就不會對x作出未用變數的警告了。
不僅如此,我們還能關閉其他編譯器的警告與錯誤訊息。譬如說:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
char b = 'df'; // no warning.
#pragma clang diagnostic pop
以上的寫法能夠暫時關閉multichar這個警告訊息。先用push把目前的設定儲存起來,然後暫時忽略某些警告與錯誤訊息,然後再以pop回復先前的設定。
能夠關閉的訊息很多,詳情請參考clang使用手冊。
參考資料:
No comments:
Post a Comment