関数に関するスプリント警告への対処“未使用”それらはパラメーターとして渡されますが

StackOverflow https://stackoverflow.com/questions/411726

  •  03-07-2019
  •  | 
  •  

質問

私のプログラムでは、 splint チェッカーが警告します:

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の非常に一般的なイディオムであり、スプリントが文句を言うのはなぜかと思います。 FAQ またはマニュアル

役に立ちましたか?

解決

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

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top