現在、Xcode 4を使用しています。pchファイルには、#define localize(s) NSLocalizedString((s), nil)
というマクロがあります。
。mファイルでこのマクロを使用しようとすると、次の警告が表示されます:Implicit declaration of function 'localize' is invalid in C99
。
このコードは問題なくコンパイルされますが、警告を表示しないように修正するにはどうすればよいですか?
NSLogをDLogにグローバルに置き換えたときに、この問題が発生しました。私は愚かに含まれています
#define DLog(...) NSLog(...
文なので、私は
#define DLog(...) DLog(...
これにより、警告とリンカエラーが発生しました。
暗黙の関数宣言は、コンパイラーが関数呼び出しとして最初に使用するのを見るものです(プロトタイプまたは関数定義が最初に見えるものとは対照的です)。
どうやらあなたのコードはlocalize(foo)
を使用したようですが、マクロ定義は表示されませんでした。考えられる理由:#include
localize
マクロを含むファイルまたはヘッダーのプリコンパイルが南に行き、localize
マクロが含まれていないため、展開されませんでした。
私が遭遇したもう1つの「愚かな」間違いは、DLogがiOSターゲットのプレフィックスヘッダーで定義されているという事実でした。そのため、OSXターゲットのプレフィックスにもコピーする必要がありました。
私の場合、このエラーが発生したファイルは1つだけでした。プロジェクトのテストターゲットメンバーシップ(右側のファイルインスペクター)に追加したことがわかりました。
このような問題は、CocoaLumberjackを誤って次のようにインポートしたために発生しました。
#import <CocoaLumberjack/DDLog.h>
どうやらCocoaLumberjackチームはコードをさらにモジュール化したようです。 DDLogError
などのマクロは、独自のヘッダーファイルで個別に定義されるようになりました。
Importステートメントをこれに置き換えて、エラーがなくなりました:
#import <CocoaLumberjack/CocoaLumberjack.h>