[adlint-user-ja:84] Re: extern FILE * で解析処理中断
Open source and free source code static analyzer
Brought to you by:
asamiogis
|
From: Yutaka Y. <ya...@us...> - 2013-10-10 10:15:12
|
矢野尾です。
お問い合わせありがとうございます。
現象からしますと、おそらく、正しい stdio.h がインクルードできていない
のが原因だと思います。
1.c と同じディレクトリにダミーの stdio.h ファイルがあったりしないでし
ょうか?
AdLint は、解析するソースコードが #include するファイルを、コンパイラ
と同様に実際にインクルードして解析を行います。
例えば、Fedora14 上の gcc でビルドするソースコードを、同じく Fedora14
上で AdLint 解析する場合は、adlintize コマンドを下記のように実行してく
ださい。
% adlintize -e i686-linux-gcc_4.5.1
この時に作成される adlint_traits.yml ファイルには、
...略...
compiler_traits:
...略...
file_search_paths:
- "/usr/local/include"
- "/usr/include"
- "/usr/lib/gcc/i686-redhat-linux/4.5.1/include"
という内容となります。
この file_search_paths 項目の設定内容により、ソースコード中に
#include <stdio.h>
が現れた時に、AdLint は
/usr/local/include/stdio.h
/usr/include/stdio.h
/usr/lib/gcc/i686-redhat-linux/4.5.1/include/stdio.h
を検索して、見つかった stdio.h ファイルを実際にインクルードします。
コンパイラや OS が提供する正しい stdio.h ファイルには、FILE 型の定義が
あるので、添付いただいた 1.c を解析できるはずです。
以上
--
矢野尾 裕 <ya...@us...>
> さたけと申します。
>
> お世話になります。
> AdLintを使い始めたところです。
>
> 以下のソースで、構文エラーにより解析処理が中断されます。
> 原因や対処方法など、教えていただけませんでしょうか。
>
> ソース
> #include <stdio.h>
>
> extern FILE *a;
>
> int main(int argc, char *argv[])
> {
> FILE *i;
>
> return 1;
> }
>
> .msg.csvの内容
> E,./1.c,3,1,core,E0008,ERR,X99,トークン `FILE *' で構文エラーを検知しま
> した。
> X,./1.c,3,1,core,X0003,ERR,X99,回復不能なエラーにより解析処理を中断しま
> した。詳>
> 細は `1.c.msg.csv' 及び `1.c.log' を確認して下さい。
>
> 以上です。
|