web-dev-qa-db-ja.com

関数の暗黙的な宣言-C99

現在、Xcode 4を使用しています。pchファイルには、#define localize(s) NSLocalizedString((s), nil)というマクロがあります。
。mファイルでこのマクロを使用しようとすると、次の警告が表示されます:Implicit declaration of function 'localize' is invalid in C99

このコードは問題なくコンパイルされますが、警告を表示しないように修正するにはどうすればよいですか?

33
Misa

NSLogをDLogにグローバルに置き換えたときに、この問題が発生しました。私は愚かに含まれています

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

文なので、私は

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

これにより、警告とリンカエラーが発生しました。

51
JPsnowytree

暗黙の関数宣言は、コンパイラーが関数呼び出しとして最初に使用するのを見るものです(プロトタイプまたは関数定義が最初に見えるものとは対照的です)。

どうやらあなたのコードはlocalize(foo)を使用したようですが、マクロ定義は表示されませんでした。考えられる理由:#includelocalizeマクロを含むファイルまたはヘッダーのプリコンパイルが南に行き、localizeマクロが含まれていないため、展開されませんでした。

34
Jens

私が遭遇したもう1つの「愚かな」間違いは、DLogがiOSターゲットのプレフィックスヘッダーで定義されているという事実でした。そのため、OSXターゲットのプレフィックスにもコピーする必要がありました。

2
Mazyod

私の場合、このエラーが発生したファイルは1つだけでした。プロジェクトのテストターゲットメンバーシップ(右側のファイルインスペクター)に追加したことがわかりました。

1
Ivan Mir

このような問題は、CocoaLumberjackを誤って次のようにインポートしたために発生しました。

#import <CocoaLumberjack/DDLog.h>

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

Importステートメントをこれに置き換えて、エラーがなくなりました:

#import <CocoaLumberjack/CocoaLumberjack.h>
1
BastiBen