2013-02-20 99 views
0

好了,這裏是我的問題......奇怪的問題與宏和ARC

我的宏定義

#define DRK_INIT(X) -(id)init \ 
{ \ 
self = [super init]; \ 
if (self) { \ 
X \ 
} \ 
return self; \ 
} 

#define DRK_DEALLOC(X) -(void)dealloc \ 
{ \ 
X \ 
[super dealloc]; \ 
} 

#define DRK_DICFROMFILE(X)   [NSDictionary dictionaryWithContentsOfFile:(X)] 
#define DRK_MUTDICFROMFILE(X)  [NSMutableDictionary dictionaryWithContentsOfFile:(X)] 
#define DRK_ARRFROMFILE(X)   [NSArray arrayWithContentsOfFile:(X)] 
#define DRK_MUTARRFROMFILE(X)  [NSMutableArray arrayWithContentsOfFile:(X)] 
#define DRK_STRFROMFILE(X)   [NSString stringWithContentsOfFile:(X) encoding:NSUTF8StringEncoding error:nil] 

#define DRK_WRITESTRTOFILE(X,Y)  [(X) writeToFile:(Y) atomically:YES encoding:NSUTF8StringEncoding error:nil] 
#define DRK_WRITEDICTOFILE(X,Y)  [(X) writeToFile:(Y) atomically:YES] 
#define DRK_WRITEARRTOFILE(X,Y)  [(X) writeToFile:(Y) atomically:YES] 

現在,當我試圖使用它們(完全一樣時,我是使用ARC),這樣,我不斷收到警告:

// Type specifier missing, defaults to 'int' 
DRK_INIT(); 

- (void)someFunction:(NSString*)str 
{ 
    // Implicit conversion of 'int' to 'NSString *' is disallowed with ARC 
    [self setContent:DRK_STRFROMFILE(str)]; 
} 

任何想法是怎麼回事?如何消除所有這些 - 實際上是無害的 - 警告/錯誤?


提示:

  • 請注意,整個事情是仍處於工作狀態,但轉換成ARC之後,不斷出現一些警告/錯誤。
  • 我跑的Xcode 4.5.1,Mac OS X的10.7.5(獅子),並與LLVM 4.1
+0

好奇你爲什麼以這種方式使用宏... – nielsbot 2013-02-20 11:50:24

+0

調用' - [super dealloc]'不允許使用ARC – nielsbot 2013-02-20 11:53:11

+0

無論如何,我不會像上面那樣使用你的DRK_INIT()檢查你的源之前,該點出錯... – nielsbot 2013-02-20 11:53:58

回答

3

請注意,您DRK_INIT的定義預計參數編制,但你沒有提供的。

你也有';'在DRK_INIT()調用結束時,它將在任何方法定義之外結束。

不要試圖第二猜測發生了什麼

使用預處理選項XCode中看到您實際產生。

+0

我一直懷疑會有'Product'->'Generate Output'->'Preprocessed File'的選項,但是直到現在才能真正發現它。雖然我最初的問題是**沒有任何**代碼(它實際上是'觸摸'.pch'文件修復*所有*錯誤的那些時間之一),我仍然會接受這個答案。謝了哥們! – 2013-02-21 07:18:07