0

私のプログラムでは、添え木チェッカーは次のように警告します。

expat-test.c:23:1: Function exported but not used outside expat-test: start
  A declaration is exported, but not used outside this module. Declaration can
  use static qualifier. (Use -exportlocal to inhibit warning)
   expat-test.c:38:1: Definition of start

start() 関数使用されます。このプログラムは、コールバックで動作するexpat XML パーサーを使用します。パーサーに関数を与えます:

XML_SetElementHandler(parser, start, end);

パーサーはいくつかの時点でそれを呼び戻します。これは C では非常に一般的な慣用句であり、なぜ splint が文句を言うのか不思議です。FAQにもマニュアルにも何も見つかりません。

4

3 に答える 3

2

が定義さXML_SetElementHandler()れているのと同じ翻訳単位 (通常は .c ソース ファイル)を呼び出しますか? start()その場合、警告は正しい可能性があります。static関数定義に追加し、アプリケーションがまだエラーなしでリンクしているかどうかを確認してください。

于 2009-01-04T21:49:25.150 に答える
2

「static」キーワードは、関数の名前を他の翻訳単位 (通常は .C ファイル) から効果的に隠します。コードはまだそこにあり、その C ファイルから関数のアドレスを取得できます (ただし、他の C ファイルからは取得できません)。次に、関数を呼び出すか、関数からアドレスを返すか、グローバル変数に格納するなどして、アドレスを他の翻訳単位に渡すことができます。

于 2009-01-04T21:59:30.340 に答える
0

静的としてエクスポートされていないすべての関数を宣言する傾向があります。私は教えられており、現在そうすることは良い習慣であると信じています。(免責事項:ほとんどの場合と同様に、この「ルール」には多くの例外があります。)

于 2009-01-05T10:05:34.447 に答える