2011-07-15 21 views
32
私は現在、Xcodeの4を使用しています

、そして私の.PCHファイルに、私はこのマクロを持っています。
一部の.mファイルでこのマクロを使用しようとすると、この警告が表示されます。Implicit declaration of function 'localize' is invalid in C99暗黙の宣言C99

このコードは問題なくコンパイルが、どのように私は警告を得ることはありませんので、この問題を解決することができますか?

+0

私はそれは、何の警告をうまくコンパイルしないと実行され、問題を再現することができませんでした。 – Lio

+0

Xcodeでバグだったようです... 4.0.2だと思います。 4.2ベータ版はうまく動作します。 – Misa

答えて

34

暗黙の関数宣言は、関数呼び出しとして最初に使用されたコンパイラが表示するものです(プロトタイプまたは関数定義が最初に表示されるものではありません)。

はどうやらあなたのコードはlocalize(foo)を使用しますが、マクロ定義は見えませんでした。考えられる理由は:あなたは#includeに局在するマクロやヘッダのプリコンパイル南行きANマクロlocalizeが含まれていませんでしたを含むファイルを忘れてしまったので、それが拡張されていない残っていました。

+3

これは、マクロがプロジェクトのプレフィックスヘッダに定義されていれば、そのヘッダがプリコンパイルされ、すべてのコンパイル単位(プロジェクト内の.mファイルすべて)で使用可能であるため、Xcodeのバグを示します。 FWIWまだXcode 4.4.1ではこのバグが見られることがありますが、Xcodeを終了して再起動すると修正されます。 – Mason

+2

これは、おそらく「ヘッダーのプリコンパイルが南になった」の下に提出される可能性があります。ツールのバグによって、何かが起こる可能性があります。 – Jens

+0

私はこれがXcode 5で起こったのを見ました。警告メッセージを取り除く最も安全な方法は、エラーを示すファイル内に関連するヘッダファイルを含めることです。 – JaredH

50

私はDLOGでのNSLogのグローバル置き換えるでした。この問題を抱えていました。私は愚かに

#define DLog(...) NSLog(... 

文が含まれているので、私は警告、リンカエラーの原因となった

#define DLog(...) DLog(... 

になってしまいました。私はに走った

2

もう一つの「愚かな」間違いが私のDLOGは、iOSのターゲットのプレフィックスヘッダで定義されたという事実だったので、私は同様に、OSXのターゲットのプレフィックスにそれを上にコピーする必要がありました...

1

私は偶然、このようCocoaLumberjackを輸入しているため、この問題を持っていた:

#import <CocoaLumberjack/DDLog.h> 

どうやらCocoaLumberjackチームはいくつかのより多くのコードをモジュール化。 DDLogErrorのようなマクロは、独自のヘッダファイルで別々に定義されるようになりました。

私はこれでimport文を置き換えると、エラーが去っていきました:

#import <CocoaLumberjack/CocoaLumberjack.h> 
1

私の場合は一つだけのファイルは、このエラーを与えていました。私はそれをプロジェクトのテストターゲットメンバーシップ(右側のファイルインスペクタ)に追加しました。

関連する問題