adlint 1.14.0 → 1.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +265 -0
- data/MANIFEST +15 -0
- data/NEWS +30 -4
- data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
- data/etc/mesg.d/en_US/messages.yml +3 -3
- data/etc/mesg.d/ja_JP/messages.yml +3 -3
- data/features/message_detection/W0001.feature +2 -0
- data/features/message_detection/W0007.feature +8 -0
- data/features/message_detection/W0010.feature +4 -1
- data/features/message_detection/W0013.feature +8 -0
- data/features/message_detection/W0093.feature +3 -0
- data/features/message_detection/W0104.feature +7 -0
- data/features/message_detection/W0643.feature +80 -0
- data/features/message_detection/W0646.feature +115 -0
- data/features/message_detection/W0691.feature +100 -0
- data/features/message_detection/W0692.feature +32 -0
- data/features/message_detection/W0694.feature +128 -0
- data/features/message_detection/W0716.feature +3 -0
- data/features/message_detection/W0717.feature +3 -0
- data/features/message_detection/W0718.feature +3 -0
- data/features/message_detection/W0723.feature +2 -0
- data/features/message_detection/W0732.feature +3 -0
- data/features/message_detection/W0733.feature +3 -0
- data/features/message_detection/W0734.feature +8 -0
- data/features/message_detection/W0735.feature +8 -0
- data/features/message_detection/W0805.feature +92 -0
- data/features/message_detection/W0811.feature +79 -0
- data/features/message_detection/W1031.feature +7 -0
- data/features/message_detection/W1040.feature +89 -0
- data/features/message_detection/W1041.feature +15 -0
- data/features/message_detection/W1046.feature +60 -0
- data/features/message_detection/W1052.feature +3 -0
- data/features/message_detection/W1066.feature +3 -0
- data/features/message_detection/W1067.feature +3 -0
- data/features/message_detection/W1068.feature +3 -0
- data/features/message_detection/W1069.feature +5 -0
- data/features/message_detection/W1070.feature +6 -0
- data/features/message_detection/W1072.feature +1 -0
- data/features/message_detection/W1073.feature +145 -0
- data/features/message_detection/W1074.feature +139 -0
- data/features/message_detection/W1075.feature +86 -0
- data/features/message_detection/W1076.feature +66 -0
- data/features/message_detection/W1077.feature +105 -0
- data/features/message_detection/W9003.feature +4 -0
- data/lib/adlint/c/ctrlexpr.rb +3 -0
- data/lib/adlint/c/interp.rb +11 -5
- data/lib/adlint/c/lexer.rb +14 -3
- data/lib/adlint/c/message.rb +192 -0
- data/lib/adlint/c/parser.rb +19 -3
- data/lib/adlint/c/parser.y +18 -2
- data/lib/adlint/c/phase.rb +19 -6
- data/lib/adlint/c/syntax.rb +6 -0
- data/lib/adlint/c/type.rb +5 -1
- data/lib/adlint/cpp/constexpr.rb +3 -3
- data/lib/adlint/cpp/constexpr.y +3 -3
- data/lib/adlint/cpp/eval.rb +60 -86
- data/lib/adlint/cpp/lexer.rb +82 -28
- data/lib/adlint/cpp/macro.rb +64 -35
- data/lib/adlint/cpp/message.rb +137 -4
- data/lib/adlint/cpp/phase.rb +8 -0
- data/lib/adlint/cpp/syntax.rb +25 -0
- data/lib/adlint/lang.rb +2 -1
- data/lib/adlint/version.rb +2 -2
- data/share/doc/developers_guide_ja.html +3 -3
- data/share/doc/developers_guide_ja.texi +1 -1
- data/share/doc/users_guide_en.html +102 -85
- data/share/doc/users_guide_en.texi +85 -69
- data/share/doc/users_guide_ja.html +102 -94
- data/share/doc/users_guide_ja.texi +85 -77
- metadata +17 -2
@@ -2,7 +2,7 @@
|
|
2
2
|
@setfilename users_guide_ja.info
|
3
3
|
@documentlanguage ja
|
4
4
|
@documentencoding utf-8
|
5
|
-
@settitle AdLint 1.
|
5
|
+
@settitle AdLint 1.16.0 利用者ガイド
|
6
6
|
|
7
7
|
@copying
|
8
8
|
Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
|
@@ -2719,7 +2719,7 @@ context_line
|
|
2719
2719
|
* W0689::#line 指令の構文が `#line 汎整数定数 "文字列"' の形式と合っていません。
|
2720
2720
|
* W0690::#line 指令の後に行番号が記述されていません。
|
2721
2721
|
* W0691::`##' 演算子の結果が有効な前処理字句ではありません。
|
2722
|
-
* W0692
|
2722
|
+
* W0692::関数形式マクロ `%s' に実引数が与えられていません。
|
2723
2723
|
* W0693::関数形式マクロがその定義よりも少ない実引数で呼び出されています。
|
2724
2724
|
* W0694::`assert' という名称の関数を呼び出す目的で、assert マクロが抑制されています。未定義の結果になります。
|
2725
2725
|
* W0695::assert マクロを #undef してその名前の関数を呼び出しできるようにすると、未定義の結果になります。
|
@@ -2855,7 +2855,7 @@ context_line
|
|
2855
2855
|
* W1037::外部結合をもつ `%s' が、二つ以上宣言されていますが互換性がありません。
|
2856
2856
|
* W1039::変換指定子に `ll' が使われています。
|
2857
2857
|
* W1040::前処理指令の後に認識できない文字列が記述されています。
|
2858
|
-
* W1041
|
2858
|
+
* W1041::`%s' は、ISO C 標準規格の正式な前処理指令ではありません。
|
2859
2859
|
* W1042::前処理指令の中で sizeof 演算子を使っています。これは言語拡張です。
|
2860
2860
|
* W1043::`@@ address' は、ISO C 標準規格ではサポートされていません。言語拡張と見なします。
|
2861
2861
|
* W1044::文を包含する式は ISO C 標準規格ではサポートされていません。言語拡張と見なします。
|
@@ -26609,15 +26609,13 @@ void func(void)
|
|
26609
26609
|
|
26610
26610
|
@subsection 内容
|
26611
26611
|
|
26612
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
26613
|
-
|
26614
26612
|
未定義の動作のため、予期しない動作を引き起こす可能性があります。
|
26615
26613
|
|
26616
26614
|
@subsection サンプルコード
|
26617
26615
|
|
26618
|
-
@c{未実装}
|
26619
26616
|
@verbatim
|
26620
|
-
|
26617
|
+
#define MACRO(x) #x
|
26618
|
+
const char *str = MACRO(foo\); /* W0643 */
|
26621
26619
|
@end verbatim
|
26622
26620
|
|
26623
26621
|
@subsection 関連メッセージ
|
@@ -26631,7 +26629,7 @@ void func(void)
|
|
26631
26629
|
|
26632
26630
|
@subsection 対応バージョン
|
26633
26631
|
|
26634
|
-
|
26632
|
+
1.16.0
|
26635
26633
|
|
26636
26634
|
@node W0644
|
26637
26635
|
@section W0644
|
@@ -26714,15 +26712,12 @@ void a;
|
|
26714
26712
|
|
26715
26713
|
@subsection 内容
|
26716
26714
|
|
26717
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
26718
|
-
|
26719
26715
|
未定義の動作のため、予期しない動作を引き起こす可能性があります。
|
26720
26716
|
|
26721
26717
|
@subsection サンプルコード
|
26722
26718
|
|
26723
|
-
@c{未実装}
|
26724
26719
|
@verbatim
|
26725
|
-
/*
|
26720
|
+
static const char *str = "foo" L"bar"; /* W0646 */
|
26726
26721
|
@end verbatim
|
26727
26722
|
|
26728
26723
|
@subsection 関連メッセージ
|
@@ -26736,7 +26731,7 @@ void a;
|
|
26736
26731
|
|
26737
26732
|
@subsection 対応バージョン
|
26738
26733
|
|
26739
|
-
|
26734
|
+
1.16.0
|
26740
26735
|
|
26741
26736
|
@node W0649
|
26742
26737
|
@section W0649
|
@@ -28991,15 +28986,14 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
28991
28986
|
|
28992
28987
|
@subsection 内容
|
28993
28988
|
|
28994
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
28995
|
-
|
28996
28989
|
このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。
|
28997
28990
|
|
28998
28991
|
@subsection サンプルコード
|
28999
28992
|
|
29000
|
-
@c{未実装}
|
29001
28993
|
@verbatim
|
29002
|
-
|
28994
|
+
#define MACRO(a, b) a ## b
|
28995
|
+
|
28996
|
+
double d = (double) MACRO(-, 123); /* W0691 */
|
29003
28997
|
@end verbatim
|
29004
28998
|
|
29005
28999
|
@subsection 関連メッセージ
|
@@ -29013,7 +29007,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29013
29007
|
|
29014
29008
|
@subsection 対応バージョン
|
29015
29009
|
|
29016
|
-
|
29010
|
+
1.16.0
|
29017
29011
|
|
29018
29012
|
@node W0692
|
29019
29013
|
@section W0692
|
@@ -29021,19 +29015,18 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29021
29015
|
|
29022
29016
|
@subsection メッセージ本文
|
29023
29017
|
|
29024
|
-
|
29018
|
+
関数形式マクロ `%s' に実引数が与えられていません。
|
29025
29019
|
|
29026
29020
|
@subsection 内容
|
29027
29021
|
|
29028
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29029
|
-
|
29030
29022
|
このような記述は、言語制約違反になりますので、移植性を低下させます。
|
29031
29023
|
|
29032
29024
|
@subsection サンプルコード
|
29033
29025
|
|
29034
|
-
@c{未実装}
|
29035
29026
|
@verbatim
|
29036
|
-
|
29027
|
+
#define MACRO(a) #a
|
29028
|
+
|
29029
|
+
const char *s = (char *) MACRO(); /* W0692 */
|
29037
29030
|
@end verbatim
|
29038
29031
|
|
29039
29032
|
@subsection 関連メッセージ
|
@@ -29044,7 +29037,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29044
29037
|
|
29045
29038
|
@subsection 対応バージョン
|
29046
29039
|
|
29047
|
-
|
29040
|
+
1.16.0
|
29048
29041
|
|
29049
29042
|
@node W0693
|
29050
29043
|
@section W0693
|
@@ -29069,7 +29062,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29069
29062
|
@subsection 関連メッセージ
|
29070
29063
|
|
29071
29064
|
@itemize
|
29072
|
-
@item @ref{W0692}
|
29065
|
+
@item @ref{W0692} 関数形式マクロ `%s' に実引数が与えられていません。
|
29073
29066
|
@end itemize
|
29074
29067
|
|
29075
29068
|
@subsection 対応バージョン
|
@@ -29086,15 +29079,18 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29086
29079
|
|
29087
29080
|
@subsection 内容
|
29088
29081
|
|
29089
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29090
|
-
|
29091
29082
|
@code{assert} という名前の関数を作成すると、未定義の結果になります。
|
29092
29083
|
|
29093
29084
|
@subsection サンプルコード
|
29094
29085
|
|
29095
|
-
@c{未実装}
|
29096
29086
|
@verbatim
|
29097
|
-
|
29087
|
+
#undef assert
|
29088
|
+
extern void assert(int);
|
29089
|
+
|
29090
|
+
void foo(void)
|
29091
|
+
{
|
29092
|
+
assert("should not be reached" == ""); /* W0694 */
|
29093
|
+
}
|
29098
29094
|
@end verbatim
|
29099
29095
|
|
29100
29096
|
@subsection 関連メッセージ
|
@@ -29103,7 +29099,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29103
29099
|
|
29104
29100
|
@subsection 対応バージョン
|
29105
29101
|
|
29106
|
-
|
29102
|
+
1.16.0
|
29107
29103
|
|
29108
29104
|
@node W0695
|
29109
29105
|
@section W0695
|
@@ -32930,14 +32926,14 @@ defined 構文が、`defined(識別子)' あるいは `defined 識別子' のど
|
|
32930
32926
|
|
32931
32927
|
@subsection 内容
|
32932
32928
|
|
32933
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
32934
|
-
|
32935
32929
|
このような記述は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
|
32936
32930
|
|
32937
32931
|
@subsection サンプルコード
|
32938
32932
|
|
32939
32933
|
@verbatim
|
32940
|
-
#if defined
|
32934
|
+
#if defined "foo" /* W0805 */
|
32935
|
+
int i = 0;
|
32936
|
+
#endif
|
32941
32937
|
@end verbatim
|
32942
32938
|
|
32943
32939
|
@subsection 関連メッセージ
|
@@ -32948,7 +32944,7 @@ defined 構文が、`defined(識別子)' あるいは `defined 識別子' のど
|
|
32948
32944
|
|
32949
32945
|
@subsection 対応バージョン
|
32950
32946
|
|
32951
|
-
|
32947
|
+
1.16.0
|
32952
32948
|
|
32953
32949
|
@node W0806
|
32954
32950
|
@section W0806
|
@@ -33124,15 +33120,16 @@ int foo(int i, int j) {
|
|
33124
33120
|
|
33125
33121
|
@subsection 内容
|
33126
33122
|
|
33127
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
33128
|
-
|
33129
33123
|
このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。
|
33130
33124
|
|
33131
33125
|
@subsection サンプルコード
|
33132
33126
|
|
33133
|
-
@c{未実装}
|
33134
33127
|
@verbatim
|
33135
|
-
|
33128
|
+
#define COND defined(FOO)
|
33129
|
+
|
33130
|
+
#if COND /* W0811 */
|
33131
|
+
int i = 0;
|
33132
|
+
#endif
|
33136
33133
|
@end verbatim
|
33137
33134
|
|
33138
33135
|
@subsection 関連メッセージ
|
@@ -33141,7 +33138,7 @@ int foo(int i, int j) {
|
|
33141
33138
|
|
33142
33139
|
@subsection 対応バージョン
|
33143
33140
|
|
33144
|
-
|
33141
|
+
1.16.0
|
33145
33142
|
|
33146
33143
|
@node W0827
|
33147
33144
|
@section W0827
|
@@ -33952,27 +33949,34 @@ extern long a; /* W1037 */
|
|
33952
33949
|
|
33953
33950
|
@subsection 内容
|
33954
33951
|
|
33955
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
33956
|
-
|
33957
33952
|
このような前処理指令の記述は、ISO C90 標準規格ではサポートされていません。
|
33958
33953
|
|
33959
33954
|
@subsection サンプルコード
|
33960
33955
|
|
33961
|
-
@c{未実装}
|
33962
33956
|
@verbatim
|
33963
|
-
|
33957
|
+
#define TEST
|
33958
|
+
|
33959
|
+
#ifdef TEST
|
33960
|
+
#if defined(CASE_1)
|
33961
|
+
int i = 1;
|
33962
|
+
#elif defined(CASE_2)
|
33963
|
+
int i = 2;
|
33964
|
+
#endif CASE /* W1040 */
|
33965
|
+
#else
|
33966
|
+
int i = 0;
|
33967
|
+
#endif TEST /* W1040 */
|
33964
33968
|
@end verbatim
|
33965
33969
|
|
33966
33970
|
@subsection 関連メッセージ
|
33967
33971
|
|
33968
33972
|
@itemize
|
33969
|
-
@item @ref{W1041}
|
33973
|
+
@item @ref{W1041} `%s' は、ISO C 標準規格の正式な前処理指令ではありません。
|
33970
33974
|
@item @ref{W1042} 前処理指令の中で sizeof 演算子を使っています。これは言語拡張です。
|
33971
33975
|
@end itemize
|
33972
33976
|
|
33973
33977
|
@subsection 対応バージョン
|
33974
33978
|
|
33975
|
-
|
33979
|
+
1.16.0
|
33976
33980
|
|
33977
33981
|
@node W1041
|
33978
33982
|
@section W1041
|
@@ -33980,19 +33984,16 @@ extern long a; /* W1037 */
|
|
33980
33984
|
|
33981
33985
|
@subsection メッセージ本文
|
33982
33986
|
|
33983
|
-
|
33987
|
+
`%s' は、ISO C 標準規格の正式な前処理指令ではありません。
|
33984
33988
|
|
33985
33989
|
@subsection 内容
|
33986
33990
|
|
33987
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
33988
|
-
|
33989
33991
|
このような前処理指令の記述は、ISO C90 標準規格ではサポートされていません。
|
33990
33992
|
|
33991
33993
|
@subsection サンプルコード
|
33992
33994
|
|
33993
|
-
@c{未実装}
|
33994
33995
|
@verbatim
|
33995
|
-
/*
|
33996
|
+
#compiler_specific_extension 1 2.3 "4" /* W1041 */
|
33996
33997
|
@end verbatim
|
33997
33998
|
|
33998
33999
|
@subsection 関連メッセージ
|
@@ -34004,7 +34005,7 @@ extern long a; /* W1037 */
|
|
34004
34005
|
|
34005
34006
|
@subsection 対応バージョン
|
34006
34007
|
|
34007
|
-
|
34008
|
+
1.16.0
|
34008
34009
|
|
34009
34010
|
@node W1042
|
34010
34011
|
@section W1042
|
@@ -34031,7 +34032,7 @@ extern long a; /* W1037 */
|
|
34031
34032
|
|
34032
34033
|
@itemize
|
34033
34034
|
@item @ref{W1040} 前処理指令の後に認識できない文字列が記述されています。
|
34034
|
-
@item @ref{W1041}
|
34035
|
+
@item @ref{W1041} `%s' は、ISO C 標準規格の正式な前処理指令ではありません。
|
34035
34036
|
@end itemize
|
34036
34037
|
|
34037
34038
|
@subsection 対応バージョン
|
@@ -34144,15 +34145,15 @@ extern long a; /* W1037 */
|
|
34144
34145
|
|
34145
34146
|
@subsection 内容
|
34146
34147
|
|
34147
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
34148
|
-
|
34149
34148
|
ISO C 規格ではバックスラッシュ文字の後に直接改行文字が続くべきであると規定しています。
|
34150
34149
|
|
34151
34150
|
@subsection サンプルコード
|
34152
34151
|
|
34153
|
-
@c{未実装}
|
34154
34152
|
@verbatim
|
34155
|
-
/*
|
34153
|
+
#define FOO(a, b) /* OK */ \
|
34154
|
+
( /* W1046 */ \
|
34155
|
+
(a) + (b) /* W1046 */ \
|
34156
|
+
)
|
34156
34157
|
@end verbatim
|
34157
34158
|
|
34158
34159
|
@subsection 関連メッセージ
|
@@ -34161,7 +34162,7 @@ ISO C 規格ではバックスラッシュ文字の後に直接改行文字が
|
|
34161
34162
|
|
34162
34163
|
@subsection 対応バージョン
|
34163
34164
|
|
34164
|
-
|
34165
|
+
1.16.0
|
34165
34166
|
|
34166
34167
|
@node W1047
|
34167
34168
|
@section W1047
|
@@ -35245,15 +35246,21 @@ Label2:
|
|
35245
35246
|
|
35246
35247
|
@subsection 内容
|
35247
35248
|
|
35248
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35249
|
-
|
35250
35249
|
関数の戻り値が使用されていない場合、その戻り値は無駄な要素といえます。コード中に無駄な要素があることで解析性が低下します。
|
35251
35250
|
また、使用されない戻り値が多いことは、戻り値のチェックも怠っていることが推測されるため、障害許容性が低下している可能性が高いといえます。
|
35252
35251
|
|
35253
35252
|
@subsection サンプルコード
|
35254
35253
|
|
35255
35254
|
@verbatim
|
35256
|
-
|
35255
|
+
extern int bar(void);
|
35256
|
+
static void foo(void)
|
35257
|
+
{
|
35258
|
+
int i;
|
35259
|
+
int j;
|
35260
|
+
for (i = 0, bar(); i < 10; i++) { /* W1073 */
|
35261
|
+
j = bar(); /* OK */
|
35262
|
+
}
|
35263
|
+
}
|
35257
35264
|
@end verbatim
|
35258
35265
|
|
35259
35266
|
@subsection 関連メッセージ
|
@@ -35262,7 +35269,7 @@ Label2:
|
|
35262
35269
|
|
35263
35270
|
@subsection 対応バージョン
|
35264
35271
|
|
35265
|
-
|
35272
|
+
1.16.0
|
35266
35273
|
|
35267
35274
|
@node W1074
|
35268
35275
|
@section W1074
|
@@ -35274,15 +35281,23 @@ Label2:
|
|
35274
35281
|
|
35275
35282
|
@subsection 内容
|
35276
35283
|
|
35277
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35278
|
-
|
35279
35284
|
サンプルコードで示したソースコードの場合、@code{sizeof} 演算子は式を評価しないため、@code{data++} は実行されません。
|
35280
35285
|
従って @code{data++} が実行されていることが前提だとすると様々な予期しない問題が起きる可能性があります。
|
35281
35286
|
|
35282
35287
|
@subsection サンプルコード
|
35283
35288
|
|
35284
35289
|
@verbatim
|
35285
|
-
int
|
35290
|
+
static int foo(void)
|
35291
|
+
{
|
35292
|
+
int i = 0;
|
35293
|
+
|
35294
|
+
if (sizeof(i++) == 4) { /* W1074 */
|
35295
|
+
return 0;
|
35296
|
+
}
|
35297
|
+
else {
|
35298
|
+
return 1;
|
35299
|
+
}
|
35300
|
+
}
|
35286
35301
|
@end verbatim
|
35287
35302
|
|
35288
35303
|
@subsection 関連メッセージ
|
@@ -35291,7 +35306,7 @@ int i = sizeof(data++); /* W1074 */
|
|
35291
35306
|
|
35292
35307
|
@subsection 対応バージョン
|
35293
35308
|
|
35294
|
-
|
35309
|
+
1.16.0
|
35295
35310
|
|
35296
35311
|
@node W1075
|
35297
35312
|
@section W1075
|
@@ -35303,8 +35318,6 @@ int i = sizeof(data++); /* W1074 */
|
|
35303
35318
|
|
35304
35319
|
@subsection 内容
|
35305
35320
|
|
35306
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35307
|
-
|
35308
35321
|
static 記憶域クラス指定子が明示されていません。
|
35309
35322
|
|
35310
35323
|
@subsection サンプルコード
|
@@ -35323,7 +35336,7 @@ int func(void) /* W1075 */
|
|
35323
35336
|
|
35324
35337
|
@subsection 対応バージョン
|
35325
35338
|
|
35326
|
-
|
35339
|
+
1.16.0
|
35327
35340
|
|
35328
35341
|
@node W1076
|
35329
35342
|
@section W1076
|
@@ -35335,8 +35348,6 @@ int func(void) /* W1075 */
|
|
35335
35348
|
|
35336
35349
|
@subsection 内容
|
35337
35350
|
|
35338
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35339
|
-
|
35340
35351
|
関数プロトタイプ宣言がないまま static 記憶域クラス指定子付きの関数が定義されています。
|
35341
35352
|
|
35342
35353
|
@subsection サンプルコード
|
@@ -35344,8 +35355,7 @@ int func(void) /* W1075 */
|
|
35344
35355
|
@verbatim
|
35345
35356
|
static int func(void) /* W1076 */
|
35346
35357
|
{
|
35347
|
-
|
35348
|
-
return ret;
|
35358
|
+
return 0;
|
35349
35359
|
}
|
35350
35360
|
@end verbatim
|
35351
35361
|
|
@@ -35355,7 +35365,7 @@ static int func(void) /* W1076 */
|
|
35355
35365
|
|
35356
35366
|
@subsection 対応バージョン
|
35357
35367
|
|
35358
|
-
|
35368
|
+
1.16.0
|
35359
35369
|
|
35360
35370
|
@node W1077
|
35361
35371
|
@section W1077
|
@@ -35367,14 +35377,12 @@ static int func(void) /* W1076 */
|
|
35367
35377
|
|
35368
35378
|
@subsection 内容
|
35369
35379
|
|
35370
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35371
|
-
|
35372
35380
|
この配列は、サイズが明示されていません。
|
35373
35381
|
|
35374
35382
|
@subsection サンプルコード
|
35375
35383
|
|
35376
35384
|
@verbatim
|
35377
|
-
extern int
|
35385
|
+
extern int a[]; /* W1077 */
|
35378
35386
|
@end verbatim
|
35379
35387
|
|
35380
35388
|
@subsection 関連メッセージ
|
@@ -35383,7 +35391,7 @@ extern int array[]; /* W1077 */
|
|
35383
35391
|
|
35384
35392
|
@subsection 対応バージョン
|
35385
35393
|
|
35386
|
-
|
35394
|
+
1.16.0
|
35387
35395
|
|
35388
35396
|
@node W9001
|
35389
35397
|
@section W9001
|