2

pclint を実行すると、インクルード ヘッダーが c/c++ ファイルで定義される順序に問題が見つかりました。

インクルードオーダーは、

#include <sys/timerfd.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <stdarg.h>                                       
#include <string.h>

そして、pclint を実行すると、たとえば FILE が宣言されていないなどのエラーが発生します。

後でインクルードの順序を変更しました

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <stdarg.h>                                       
#include <string.h>
#include <sys/timerfd.h>

多くのエラーがなくなっていることがわかりました。この動作の理由を理解できません。C/C++ (NT) バージョンでは PC-lint を使用しています。8.00w。

インクルード パスを +libdir(D:\timesys\Nitrogen6x\toolchain\include) のようにマークしました。

ブリジェシュありがとう

4

1 に答える 1

1

おそらく、ヘッダー ファイルのインクルードは少し問題になりますが、そのような機会はめったにありません。一部のインクルード ファイルは、別のインクルード ファイルでのみ定義されている型、列挙型、またはその他のものを使用します。

たとえば、Linux では、一部の関数に複数のヘッダーを含める必要があります。これらを使用するプログラムの中には、これらのヘッダーを間違った順序で含めると失敗するものがあります。最終的なリンク段階のようなものです。ライブラリを正しい順序で設定する必要があります。そうしないと、未解決の依存関係が発生する可能性があります。

例を見つけたら、ここに投稿します。

編集:例が見つかりました。Qt。Qt には、非常に複雑なヘッダー セットがあります。たとえば、QtOpenGL.h の前に opengl.h をインクルードすると、Qt ヘッダー内で opengl のインクルードをチェックするため、コンパイル エラーが発生します。何らかの理由で、QtOpenGL.h が最初に来なければなりません。

于 2014-02-26T17:29:10.073 に答える