adlint 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +1 -1
- data/ChangeLog +272 -0
- data/MANIFEST +4 -0
- data/NEWS +39 -4
- data/etc/mesg.d/en_US/messages.yml +2 -2
- data/etc/mesg.d/ja_JP/messages.yml +2 -2
- data/lib/adlint/c.rb +1 -0
- data/lib/adlint/c/expr.rb +20 -26
- data/lib/adlint/c/interp.rb +137 -45
- data/lib/adlint/c/mediator.rb +4 -0
- data/lib/adlint/c/message.rb +479 -16
- data/lib/adlint/c/message_shima.rb +151 -0
- data/lib/adlint/c/phase.rb +23 -0
- data/lib/adlint/c/resolver.rb +1 -0
- data/lib/adlint/c/syntax.rb +93 -89
- data/lib/adlint/c/type.rb +70 -0
- data/lib/adlint/cpp/eval.rb +12 -1
- data/lib/adlint/cpp/message_shima.rb +51 -0
- data/lib/adlint/cpp/phase.rb +3 -0
- data/lib/adlint/version.rb +2 -2
- data/share/demo/Makefile +3 -0
- data/share/demo/bad_enum/bad_enum.c +27 -0
- data/share/demo/bad_macro/bad_macro.c +4 -0
- data/share/demo/bad_return/bad_return.c +83 -0
- data/share/demo/incomplete_type/incomplete_type.c +3 -0
- data/share/demo/overflow/overflow.c +59 -5
- data/share/demo/union_type/union_type.c +13 -0
- data/share/demo/unnamed_member/unnamed_member.c +13 -0
- data/share/demo/various_fundef/various_fundef.c +43 -0
- data/share/demo/wrap_around/wrap_around.c +95 -21
- 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 +222 -149
- data/share/doc/users_guide_en.texi +194 -120
- data/share/doc/users_guide_ja.html +224 -167
- data/share/doc/users_guide_ja.texi +194 -137
- metadata +6 -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.4.0 利用者ガイド
|
6
6
|
|
7
7
|
@copying
|
8
8
|
Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
|
@@ -2747,7 +2747,7 @@ context_line
|
|
2747
2747
|
* W0722::符号付きの式の値がオーバーフローしています。
|
2748
2748
|
* W0723::符号付きの式の値がオーバーフローする可能性があります。
|
2749
2749
|
* W0724::条件付きインクルード指令によって、認識できない前処理指令が無視されました。
|
2750
|
-
* W0726::修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return
|
2750
|
+
* W0726::修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式;' が見つかりました。
|
2751
2751
|
* W0727::列挙型にない値を使っています。
|
2752
2752
|
* W0728::列挙型の関数仮引数に、別の列挙型の列挙定数が実引数として渡されています。
|
2753
2753
|
* W0729::列挙型のオブジェクトに、別の列挙型の列挙定数が代入されています。
|
@@ -5370,7 +5370,7 @@ int func(int a, int b)
|
|
5370
5370
|
|
5371
5371
|
@subsection 関連メッセージ
|
5372
5372
|
|
5373
|
-
|
5373
|
+
なし。
|
5374
5374
|
|
5375
5375
|
@subsection 対応バージョン
|
5376
5376
|
|
@@ -25612,15 +25612,15 @@ while (n > 0) {
|
|
25612
25612
|
|
25613
25613
|
@subsection 内容
|
25614
25614
|
|
25615
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
25616
|
-
|
25617
25615
|
浮動小数点型のメンバ変数に対して共用体を使ってビット単位でアクセスする場合の動作はコンパイラ依存なので、移植性を低下させます。
|
25618
25616
|
|
25619
25617
|
@subsection サンプルコード
|
25620
25618
|
|
25621
|
-
@c{未実装}
|
25622
25619
|
@verbatim
|
25623
|
-
/*
|
25620
|
+
union UNI { /* W0606 */
|
25621
|
+
float a;
|
25622
|
+
int b;
|
25623
|
+
};
|
25624
25624
|
@end verbatim
|
25625
25625
|
|
25626
25626
|
@subsection 関連メッセージ
|
@@ -25629,7 +25629,7 @@ while (n > 0) {
|
|
25629
25629
|
|
25630
25630
|
@subsection 対応バージョン
|
25631
25631
|
|
25632
|
-
|
25632
|
+
1.4.0
|
25633
25633
|
|
25634
25634
|
@node W0607
|
25635
25635
|
@section W0607
|
@@ -28829,8 +28829,6 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
28829
28829
|
|
28830
28830
|
@subsection 内容
|
28831
28831
|
|
28832
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
28833
|
-
|
28834
28832
|
このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。
|
28835
28833
|
|
28836
28834
|
@subsection サンプルコード
|
@@ -28850,7 +28848,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
28850
28848
|
|
28851
28849
|
@subsection 対応バージョン
|
28852
28850
|
|
28853
|
-
|
28851
|
+
1.4.0
|
28854
28852
|
|
28855
28853
|
@node W0688
|
28856
28854
|
@section W0688
|
@@ -29083,17 +29081,13 @@ assert マクロを #undef してその名前の関数を呼び出しできる
|
|
29083
29081
|
|
29084
29082
|
@subsection 内容
|
29085
29083
|
|
29086
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29087
|
-
|
29088
29084
|
@code{assert} マクロの定義解消や再定義は、未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
|
29089
29085
|
|
29090
29086
|
@subsection サンプルコード
|
29091
29087
|
|
29092
29088
|
@verbatim
|
29093
29089
|
#undef assert /* W0695 */
|
29094
|
-
void assert(int a)
|
29095
|
-
{
|
29096
|
-
}
|
29090
|
+
extern void assert(int a);
|
29097
29091
|
@end verbatim
|
29098
29092
|
|
29099
29093
|
@subsection 関連メッセージ
|
@@ -29102,7 +29096,7 @@ void assert(int a)
|
|
29102
29096
|
|
29103
29097
|
@subsection 対応バージョン
|
29104
29098
|
|
29105
|
-
|
29099
|
+
1.4.0
|
29106
29100
|
|
29107
29101
|
@node W0696
|
29108
29102
|
@section W0696
|
@@ -29189,15 +29183,15 @@ int func(int value) /* W0697 */
|
|
29189
29183
|
|
29190
29184
|
@subsection 内容
|
29191
29185
|
|
29192
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29193
|
-
|
29194
29186
|
式を持たない @code{return} 文は不定値を返します。
|
29195
29187
|
|
29196
29188
|
@subsection サンプルコード
|
29197
29189
|
|
29198
|
-
@c{未実装}
|
29199
29190
|
@verbatim
|
29200
|
-
|
29191
|
+
int func(void)
|
29192
|
+
{
|
29193
|
+
return; /* W0698 */
|
29194
|
+
}
|
29201
29195
|
@end verbatim
|
29202
29196
|
|
29203
29197
|
@subsection 関連メッセージ
|
@@ -29210,7 +29204,7 @@ int func(int value) /* W0697 */
|
|
29210
29204
|
|
29211
29205
|
@subsection 対応バージョン
|
29212
29206
|
|
29213
|
-
|
29207
|
+
1.4.0
|
29214
29208
|
|
29215
29209
|
@node W0699
|
29216
29210
|
@section W0699
|
@@ -29222,15 +29216,15 @@ int func(int value) /* W0697 */
|
|
29222
29216
|
|
29223
29217
|
@subsection 内容
|
29224
29218
|
|
29225
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29226
|
-
|
29227
29219
|
式を持たない @code{return} 文は不定値を返します。
|
29228
29220
|
|
29229
29221
|
@subsection サンプルコード
|
29230
29222
|
|
29231
|
-
@c{未実装}
|
29232
29223
|
@verbatim
|
29233
|
-
|
29224
|
+
extern func(void)
|
29225
|
+
{
|
29226
|
+
return; /* W0699 */
|
29227
|
+
}
|
29234
29228
|
@end verbatim
|
29235
29229
|
|
29236
29230
|
@subsection 関連メッセージ
|
@@ -29243,7 +29237,7 @@ int func(int value) /* W0697 */
|
|
29243
29237
|
|
29244
29238
|
@subsection 対応バージョン
|
29245
29239
|
|
29246
|
-
|
29240
|
+
1.4.0
|
29247
29241
|
|
29248
29242
|
@node W0700
|
29249
29243
|
@section W0700
|
@@ -29751,15 +29745,16 @@ unsigned int ui = uc >> 8; /* W0719 */
|
|
29751
29745
|
|
29752
29746
|
@subsection 内容
|
29753
29747
|
|
29754
|
-
|
29755
|
-
|
29756
|
-
上記のような式は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
|
29748
|
+
このような式は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
|
29757
29749
|
|
29758
29750
|
@subsection サンプルコード
|
29759
29751
|
|
29760
|
-
@c{未実装}
|
29761
29752
|
@verbatim
|
29762
|
-
/*
|
29753
|
+
signed char sc1 = (signed char) 127.5; /* OK */
|
29754
|
+
signed char sc2 = (signed char) 128.5; /* W0720 */
|
29755
|
+
|
29756
|
+
signed char sc3 = (signed char) -128.5; /* OK */
|
29757
|
+
signed char sc4 = (signed char) -129.5; /* W0720 */
|
29763
29758
|
@end verbatim
|
29764
29759
|
|
29765
29760
|
@subsection 関連メッセージ
|
@@ -29768,7 +29763,7 @@ unsigned int ui = uc >> 8; /* W0719 */
|
|
29768
29763
|
|
29769
29764
|
@subsection 対応バージョン
|
29770
29765
|
|
29771
|
-
|
29766
|
+
1.4.0
|
29772
29767
|
|
29773
29768
|
@node W0721
|
29774
29769
|
@section W0721
|
@@ -29780,16 +29775,17 @@ unsigned int ui = uc >> 8; /* W0719 */
|
|
29780
29775
|
|
29781
29776
|
@subsection 内容
|
29782
29777
|
|
29783
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29784
|
-
|
29785
29778
|
上記のような変換により、ポインタ型変数の一部の情報が欠落したものが整数型に代入されることになります。
|
29786
29779
|
したがって、代入先の値はもはや正しいアドレスを指していないことになります。
|
29787
29780
|
|
29788
29781
|
@subsection サンプルコード
|
29789
29782
|
|
29790
29783
|
@verbatim
|
29791
|
-
|
29792
|
-
|
29784
|
+
void func(int *p)
|
29785
|
+
{
|
29786
|
+
/* when short is 16 bit long and pointer is 32 bit long */
|
29787
|
+
unsigned short us = (unsigned short) p; /* W0721 */
|
29788
|
+
}
|
29793
29789
|
@end verbatim
|
29794
29790
|
|
29795
29791
|
@subsection 関連メッセージ
|
@@ -29798,7 +29794,7 @@ unsigned short us = (unsigned short) p; /* W0721 */
|
|
29798
29794
|
|
29799
29795
|
@subsection 対応バージョン
|
29800
29796
|
|
29801
|
-
|
29797
|
+
1.4.0
|
29802
29798
|
|
29803
29799
|
@node W0722
|
29804
29800
|
@section W0722
|
@@ -29810,18 +29806,20 @@ unsigned short us = (unsigned short) p; /* W0721 */
|
|
29810
29806
|
|
29811
29807
|
@subsection 内容
|
29812
29808
|
|
29813
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29814
|
-
|
29815
29809
|
値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。
|
29816
29810
|
したがって、予期しない動作を引き起こす可能性があります。
|
29817
29811
|
|
29818
29812
|
@subsection サンプルコード
|
29819
29813
|
|
29820
29814
|
@verbatim
|
29821
|
-
int func(int a)
|
29815
|
+
int func(int a)
|
29822
29816
|
{
|
29823
|
-
|
29824
|
-
|
29817
|
+
/* when int is 32 bit long */
|
29818
|
+
if (a < 0) {
|
29819
|
+
return a + 1; /* OK */
|
29820
|
+
}
|
29821
|
+
else if (a < 2147483647) {
|
29822
|
+
return a + 1; /* OK */
|
29825
29823
|
}
|
29826
29824
|
|
29827
29825
|
return a + 1; /* W0722 */
|
@@ -29836,7 +29834,7 @@ int func(int a) /* int type is 32 bit long */
|
|
29836
29834
|
|
29837
29835
|
@subsection 対応バージョン
|
29838
29836
|
|
29839
|
-
|
29837
|
+
1.4.0
|
29840
29838
|
|
29841
29839
|
@node W0723
|
29842
29840
|
@section W0723
|
@@ -29848,16 +29846,24 @@ int func(int a) /* int type is 32 bit long */
|
|
29848
29846
|
|
29849
29847
|
@subsection 内容
|
29850
29848
|
|
29851
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29852
|
-
|
29853
29849
|
値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。
|
29854
29850
|
したがって、予期しない動作を引き起こす可能性があります。
|
29855
29851
|
|
29856
29852
|
@subsection サンプルコード
|
29857
29853
|
|
29858
|
-
@c{未実装}
|
29859
29854
|
@verbatim
|
29860
|
-
|
29855
|
+
int func(int a)
|
29856
|
+
{
|
29857
|
+
/* when int is 32 bit long */
|
29858
|
+
if (a < 0) {
|
29859
|
+
return a + 1; /* OK */
|
29860
|
+
}
|
29861
|
+
else if (a < 2000000000) {
|
29862
|
+
return a + 1; /* OK */
|
29863
|
+
}
|
29864
|
+
|
29865
|
+
return a + 1; /* W0723 */
|
29866
|
+
}
|
29861
29867
|
@end verbatim
|
29862
29868
|
|
29863
29869
|
@subsection 関連メッセージ
|
@@ -29868,7 +29874,7 @@ int func(int a) /* int type is 32 bit long */
|
|
29868
29874
|
|
29869
29875
|
@subsection 対応バージョン
|
29870
29876
|
|
29871
|
-
|
29877
|
+
1.4.0
|
29872
29878
|
|
29873
29879
|
@node W0724
|
29874
29880
|
@section W0724
|
@@ -29905,20 +29911,18 @@ int func(int a) /* int type is 32 bit long */
|
|
29905
29911
|
|
29906
29912
|
@subsection メッセージ本文
|
29907
29913
|
|
29908
|
-
修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return
|
29914
|
+
修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式;' が見つかりました。
|
29909
29915
|
|
29910
29916
|
@subsection 内容
|
29911
29917
|
|
29912
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29913
|
-
|
29914
29918
|
値を戻してはならない関数であるにも関わらず、明示的な @code{return} 文があります。このような記述は誤りです。
|
29915
29919
|
|
29916
29920
|
@subsection サンプルコード
|
29917
29921
|
|
29918
29922
|
@verbatim
|
29919
|
-
void func(int a)
|
29923
|
+
const void func(int a)
|
29920
29924
|
{
|
29921
|
-
if(a == 0) {
|
29925
|
+
if (a == 0) {
|
29922
29926
|
return 0; /* W0726 */
|
29923
29927
|
}
|
29924
29928
|
}
|
@@ -29930,7 +29934,7 @@ void func(int a)
|
|
29930
29934
|
|
29931
29935
|
@subsection 対応バージョン
|
29932
29936
|
|
29933
|
-
|
29937
|
+
1.4.0
|
29934
29938
|
|
29935
29939
|
@node W0727
|
29936
29940
|
@section W0727
|
@@ -29942,17 +29946,15 @@ void func(int a)
|
|
29942
29946
|
|
29943
29947
|
@subsection 内容
|
29944
29948
|
|
29945
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29946
|
-
|
29947
29949
|
このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
|
29948
29950
|
|
29949
29951
|
@subsection サンプルコード
|
29950
29952
|
|
29951
29953
|
@verbatim
|
29952
29954
|
enum Fruits {
|
29953
|
-
|
29954
|
-
|
29955
|
-
|
29955
|
+
APPLE = 1,
|
29956
|
+
BANANA,
|
29957
|
+
ORANGE
|
29956
29958
|
};
|
29957
29959
|
|
29958
29960
|
enum Fruits fruit = 5; /* W0727 */
|
@@ -29969,7 +29971,7 @@ enum Fruits fruit = 5; /* W0727 */
|
|
29969
29971
|
|
29970
29972
|
@subsection 対応バージョン
|
29971
29973
|
|
29972
|
-
|
29974
|
+
1.4.0
|
29973
29975
|
|
29974
29976
|
@node W0728
|
29975
29977
|
@section W0728
|
@@ -29981,15 +29983,20 @@ enum Fruits fruit = 5; /* W0727 */
|
|
29981
29983
|
|
29982
29984
|
@subsection 内容
|
29983
29985
|
|
29984
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
29985
|
-
|
29986
29986
|
このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
|
29987
29987
|
|
29988
29988
|
@subsection サンプルコード
|
29989
29989
|
|
29990
|
-
@c{未実装}
|
29991
29990
|
@verbatim
|
29992
|
-
|
29991
|
+
enum Color { RED, BLUE, GREEN };
|
29992
|
+
enum Fruits { APPLE, BANANA, ORANGE };
|
29993
|
+
|
29994
|
+
extern void func1(enum Color);
|
29995
|
+
|
29996
|
+
void func2(void)
|
29997
|
+
{
|
29998
|
+
func1(ORANGE); /* W0728 */
|
29999
|
+
}
|
29993
30000
|
@end verbatim
|
29994
30001
|
|
29995
30002
|
@subsection 関連メッセージ
|
@@ -30003,7 +30010,7 @@ enum Fruits fruit = 5; /* W0727 */
|
|
30003
30010
|
|
30004
30011
|
@subsection 対応バージョン
|
30005
30012
|
|
30006
|
-
|
30013
|
+
1.4.0
|
30007
30014
|
|
30008
30015
|
@node W0729
|
30009
30016
|
@section W0729
|
@@ -30015,15 +30022,20 @@ enum Fruits fruit = 5; /* W0727 */
|
|
30015
30022
|
|
30016
30023
|
@subsection 内容
|
30017
30024
|
|
30018
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30019
|
-
|
30020
30025
|
このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
|
30021
30026
|
|
30022
30027
|
@subsection サンプルコード
|
30023
30028
|
|
30024
|
-
@c{未実装}
|
30025
30029
|
@verbatim
|
30026
|
-
|
30030
|
+
enum Color { RED, BLUE, GREEN };
|
30031
|
+
enum Fruits { APPLE, BANANA, ORANGE };
|
30032
|
+
|
30033
|
+
void func(void)
|
30034
|
+
{
|
30035
|
+
enum Color c;
|
30036
|
+
|
30037
|
+
c = ORANGE; /* W0729 */
|
30038
|
+
}
|
30027
30039
|
@end verbatim
|
30028
30040
|
|
30029
30041
|
@subsection 関連メッセージ
|
@@ -30037,7 +30049,7 @@ enum Fruits fruit = 5; /* W0727 */
|
|
30037
30049
|
|
30038
30050
|
@subsection 対応バージョン
|
30039
30051
|
|
30040
|
-
|
30052
|
+
1.4.0
|
30041
30053
|
|
30042
30054
|
@node W0730
|
30043
30055
|
@section W0730
|
@@ -30049,15 +30061,18 @@ enum Fruits fruit = 5; /* W0727 */
|
|
30049
30061
|
|
30050
30062
|
@subsection 内容
|
30051
30063
|
|
30052
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30053
|
-
|
30054
30064
|
このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
|
30055
30065
|
|
30056
30066
|
@subsection サンプルコード
|
30057
30067
|
|
30058
|
-
@c{未実装}
|
30059
30068
|
@verbatim
|
30060
|
-
|
30069
|
+
enum Color { RED, BLUE, GREEN };
|
30070
|
+
enum Fruits { APPLE, BANANA, ORANGE };
|
30071
|
+
|
30072
|
+
enum Color func(void)
|
30073
|
+
{
|
30074
|
+
return ORANGE; /* W0730 */
|
30075
|
+
}
|
30061
30076
|
@end verbatim
|
30062
30077
|
|
30063
30078
|
@subsection 関連メッセージ
|
@@ -30071,7 +30086,7 @@ enum Fruits fruit = 5; /* W0727 */
|
|
30071
30086
|
|
30072
30087
|
@subsection 対応バージョン
|
30073
30088
|
|
30074
|
-
|
30089
|
+
1.4.0
|
30075
30090
|
|
30076
30091
|
@node W0731
|
30077
30092
|
@section W0731
|
@@ -30083,15 +30098,25 @@ switch 文の case ラベルの値 `%s' は制御式の列挙型に属してい
|
|
30083
30098
|
|
30084
30099
|
@subsection 内容
|
30085
30100
|
|
30086
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30087
|
-
|
30088
30101
|
このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
|
30089
30102
|
|
30090
30103
|
@subsection サンプルコード
|
30091
30104
|
|
30092
|
-
@c{未実装}
|
30093
30105
|
@verbatim
|
30094
|
-
|
30106
|
+
enum Color { RED, BLUE, GREEN };
|
30107
|
+
enum Fruits { APPLE, BANANA, ORANGE, GRAPE };
|
30108
|
+
|
30109
|
+
int func(enum Color c)
|
30110
|
+
{
|
30111
|
+
switch (c) {
|
30112
|
+
case RED:
|
30113
|
+
return 1;
|
30114
|
+
case GRAPE: /* W0731 */
|
30115
|
+
return 2;
|
30116
|
+
}
|
30117
|
+
|
30118
|
+
return 0;
|
30119
|
+
}
|
30095
30120
|
@end verbatim
|
30096
30121
|
|
30097
30122
|
@subsection 関連メッセージ
|
@@ -30105,7 +30130,7 @@ switch 文の case ラベルの値 `%s' は制御式の列挙型に属してい
|
|
30105
30130
|
|
30106
30131
|
@subsection 対応バージョン
|
30107
30132
|
|
30108
|
-
|
30133
|
+
1.4.0
|
30109
30134
|
|
30110
30135
|
@node W0732
|
30111
30136
|
@section W0732
|
@@ -30285,15 +30310,12 @@ int func2(void)
|
|
30285
30310
|
|
30286
30311
|
@subsection 内容
|
30287
30312
|
|
30288
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30289
|
-
|
30290
30313
|
定義していない列挙体のタグを使用することは言語制約違反になります。したがって、移植性を低下させます。
|
30291
30314
|
|
30292
30315
|
@subsection サンプルコード
|
30293
30316
|
|
30294
|
-
@c{未実装}
|
30295
30317
|
@verbatim
|
30296
|
-
/*
|
30318
|
+
extern enum Foo foo; /* W0737 */
|
30297
30319
|
@end verbatim
|
30298
30320
|
|
30299
30321
|
@subsection 関連メッセージ
|
@@ -30302,7 +30324,7 @@ int func2(void)
|
|
30302
30324
|
|
30303
30325
|
@subsection 対応バージョン
|
30304
30326
|
|
30305
|
-
|
30327
|
+
1.4.0
|
30306
30328
|
|
30307
30329
|
@node W0738
|
30308
30330
|
@section W0738
|
@@ -30314,15 +30336,19 @@ int func2(void)
|
|
30314
30336
|
|
30315
30337
|
@subsection 内容
|
30316
30338
|
|
30317
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30318
|
-
|
30319
30339
|
値が型で表現可能な範囲を超えてしまう(オーバーフローする)ことで、代入先には元々の定数の値がそのまま入らなくなります。
|
30320
30340
|
つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
|
30321
30341
|
|
30322
30342
|
@subsection サンプルコード
|
30323
30343
|
|
30324
30344
|
@verbatim
|
30325
|
-
|
30345
|
+
/* when char is 8 bit long */
|
30346
|
+
const unsigned char uc1 = 255; /* OK */
|
30347
|
+
const unsigned char uc2 = 256; /* W0738 */
|
30348
|
+
|
30349
|
+
/* when int is 32 bit long */
|
30350
|
+
const unsigned int ui1 = 4294967295; /* OK */
|
30351
|
+
const unsigned int ui2 = 4294967296; /* W0738 */
|
30326
30352
|
@end verbatim
|
30327
30353
|
|
30328
30354
|
@subsection 関連メッセージ
|
@@ -30331,7 +30357,7 @@ unsigned char uc = 500; /* W0738 */
|
|
30331
30357
|
|
30332
30358
|
@subsection 対応バージョン
|
30333
30359
|
|
30334
|
-
|
30360
|
+
1.4.0
|
30335
30361
|
|
30336
30362
|
@node W0739
|
30337
30363
|
@section W0739
|
@@ -30343,15 +30369,14 @@ unsigned char uc = 500; /* W0738 */
|
|
30343
30369
|
|
30344
30370
|
@subsection 内容
|
30345
30371
|
|
30346
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30347
|
-
|
30348
30372
|
値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
|
30349
30373
|
つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
|
30350
30374
|
|
30351
30375
|
@subsection サンプルコード
|
30352
30376
|
|
30353
30377
|
@verbatim
|
30354
|
-
unsigned int
|
30378
|
+
const unsigned int ui1 = 3U - 3U; /* OK */
|
30379
|
+
const unsigned int ui2 = 3U - 5U; /* W0739 */
|
30355
30380
|
@end verbatim
|
30356
30381
|
|
30357
30382
|
@subsection 関連メッセージ
|
@@ -30363,7 +30388,7 @@ unsigned int ui = 5U - 10U; /* W0739 */
|
|
30363
30388
|
|
30364
30389
|
@subsection 対応バージョン
|
30365
30390
|
|
30366
|
-
|
30391
|
+
1.4.0
|
30367
30392
|
|
30368
30393
|
@node W0740
|
30369
30394
|
@section W0740
|
@@ -30375,17 +30400,15 @@ unsigned int ui = 5U - 10U; /* W0739 */
|
|
30375
30400
|
|
30376
30401
|
@subsection 内容
|
30377
30402
|
|
30378
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30379
|
-
|
30380
30403
|
値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
|
30381
30404
|
つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
|
30382
30405
|
|
30383
30406
|
@subsection サンプルコード
|
30384
30407
|
|
30385
30408
|
@verbatim
|
30386
|
-
|
30387
|
-
|
30388
|
-
unsigned
|
30409
|
+
/* when int is 32 bit long */
|
30410
|
+
const unsigned int ui1 = 4294967294U + 1U; /* OK */
|
30411
|
+
const unsigned int ui2 = 4294967295U + 1U; /* W0740 */
|
30389
30412
|
@end verbatim
|
30390
30413
|
|
30391
30414
|
@subsection 関連メッセージ
|
@@ -30397,7 +30420,7 @@ unsigned char uc = MACRO + 10; /* W0740 */
|
|
30397
30420
|
|
30398
30421
|
@subsection 対応バージョン
|
30399
30422
|
|
30400
|
-
|
30423
|
+
1.4.0
|
30401
30424
|
|
30402
30425
|
@node W0741
|
30403
30426
|
@section W0741
|
@@ -30409,16 +30432,15 @@ unsigned char uc = MACRO + 10; /* W0740 */
|
|
30409
30432
|
|
30410
30433
|
@subsection 内容
|
30411
30434
|
|
30412
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30413
|
-
|
30414
30435
|
値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
|
30415
30436
|
つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
|
30416
30437
|
|
30417
30438
|
@subsection サンプルコード
|
30418
30439
|
|
30419
|
-
@c{未実装}
|
30420
30440
|
@verbatim
|
30421
|
-
/*
|
30441
|
+
/* when int is 32 bit long */
|
30442
|
+
const unsigned int ui1 = 2000000000U * 2U; /* OK */
|
30443
|
+
const unsigned int ui2 = 3000000000U * 2U; /* W0741 */
|
30422
30444
|
@end verbatim
|
30423
30445
|
|
30424
30446
|
@subsection 関連メッセージ
|
@@ -30430,7 +30452,7 @@ unsigned char uc = MACRO + 10; /* W0740 */
|
|
30430
30452
|
|
30431
30453
|
@subsection 対応バージョン
|
30432
30454
|
|
30433
|
-
|
30455
|
+
1.4.0
|
30434
30456
|
|
30435
30457
|
@node W0742
|
30436
30458
|
@section W0742
|
@@ -30472,8 +30494,6 @@ ui = MACRO - 100; /* W0742 */
|
|
30472
30494
|
|
30473
30495
|
@subsection 内容
|
30474
30496
|
|
30475
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30476
|
-
|
30477
30497
|
値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
|
30478
30498
|
つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
|
30479
30499
|
また、このような処理は、動作が処理系定義になります。したがって、移植性を低下させます。
|
@@ -30481,11 +30501,13 @@ ui = MACRO - 100; /* W0742 */
|
|
30481
30501
|
@subsection サンプルコード
|
30482
30502
|
|
30483
30503
|
@verbatim
|
30484
|
-
|
30485
|
-
|
30486
|
-
signed char
|
30504
|
+
/* when char is 8 bit long */
|
30505
|
+
const signed char sc1 = 127; /* OK */
|
30506
|
+
const signed char sc2 = 128; /* W0743 */
|
30487
30507
|
|
30488
|
-
|
30508
|
+
/* when int is 32 bit long */
|
30509
|
+
const int si1 = 2147483647; /* OK */
|
30510
|
+
const int si2 = 2147483648; /* W0743 */
|
30489
30511
|
@end verbatim
|
30490
30512
|
|
30491
30513
|
@subsection 関連メッセージ
|
@@ -30494,7 +30516,7 @@ sc = MACRO + 150; /* W0743 */
|
|
30494
30516
|
|
30495
30517
|
@subsection 対応バージョン
|
30496
30518
|
|
30497
|
-
|
30519
|
+
1.4.0
|
30498
30520
|
|
30499
30521
|
@node W0744
|
30500
30522
|
@section W0744
|
@@ -32692,15 +32714,20 @@ struct ST s = { 0 }; /* W0800 */
|
|
32692
32714
|
|
32693
32715
|
@subsection 内容
|
32694
32716
|
|
32695
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
32696
|
-
|
32697
32717
|
名前付きのメンバを一つも持たない構造体または共用体を使用したときの動作は未定義です。
|
32698
32718
|
従って、予期しない動作を引き起こす可能性があります。
|
32699
32719
|
|
32700
32720
|
@subsection サンプルコード
|
32701
32721
|
|
32702
32722
|
@verbatim
|
32703
|
-
struct
|
32723
|
+
struct foo { /* W0801 */
|
32724
|
+
};
|
32725
|
+
|
32726
|
+
struct bar { /* W0801 */
|
32727
|
+
int;
|
32728
|
+
int :1;
|
32729
|
+
long;
|
32730
|
+
double;
|
32704
32731
|
};
|
32705
32732
|
@end verbatim
|
32706
32733
|
|
@@ -32710,7 +32737,7 @@ struct ST { /* W0801 */
|
|
32710
32737
|
|
32711
32738
|
@subsection 対応バージョン
|
32712
32739
|
|
32713
|
-
|
32740
|
+
1.4.0
|
32714
32741
|
|
32715
32742
|
@node W0802
|
32716
32743
|
@section W0802
|
@@ -32842,16 +32869,13 @@ defined 構文が、`defined(識別子)' あるいは `defined 識別子' のど
|
|
32842
32869
|
|
32843
32870
|
@subsection 内容
|
32844
32871
|
|
32845
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
32846
|
-
|
32847
32872
|
ISO C90 で規定されている予約語を定義、再定義、定義解消することは未定義の動作になります。
|
32848
32873
|
したがって、予期しない動作を引き起こす可能性あります。
|
32849
32874
|
|
32850
32875
|
@subsection サンプルコード
|
32851
32876
|
|
32852
|
-
@c{未実装}
|
32853
32877
|
@verbatim
|
32854
|
-
/*
|
32878
|
+
#define defined !defined /* W0806 */
|
32855
32879
|
@end verbatim
|
32856
32880
|
|
32857
32881
|
@subsection 関連メッセージ
|
@@ -32863,7 +32887,7 @@ ISO C90 で規定されている予約語を定義、再定義、定義解消す
|
|
32863
32887
|
|
32864
32888
|
@subsection 対応バージョン
|
32865
32889
|
|
32866
|
-
|
32890
|
+
1.4.0
|
32867
32891
|
|
32868
32892
|
@node W0807
|
32869
32893
|
@section W0807
|
@@ -33227,6 +33251,10 @@ long long int a = 0LL; /* W0833 */
|
|
33227
33251
|
|
33228
33252
|
long long 型を使っています。
|
33229
33253
|
|
33254
|
+
@subsection 内容
|
33255
|
+
|
33256
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
33257
|
+
|
33230
33258
|
@code{long long} 型は、言語拡張に該当するため、移植性を低下させます。
|
33231
33259
|
|
33232
33260
|
@subsection サンプルコード
|
@@ -33243,7 +33271,7 @@ long long a = 0; /* W0834 */
|
|
33243
33271
|
|
33244
33272
|
@subsection 対応バージョン
|
33245
33273
|
|
33246
|
-
|
33274
|
+
2.0.0 の予定
|
33247
33275
|
|
33248
33276
|
@node W0835
|
33249
33277
|
@section W0835
|
@@ -33613,16 +33641,26 @@ static struct ST a[3]; /* W1032 */
|
|
33613
33641
|
|
33614
33642
|
@subsection 内容
|
33615
33643
|
|
33616
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
33617
|
-
|
33618
33644
|
関数の戻り値の型が、@code{volatile} 型の場合の動作は処理系定義です。
|
33619
33645
|
また、@code{const} 型の場合は未定義です。
|
33620
33646
|
|
33621
33647
|
@subsection サンプルコード
|
33622
33648
|
|
33623
|
-
@c{未実装}
|
33624
33649
|
@verbatim
|
33625
|
-
/*
|
33650
|
+
extern const int func1(int); /* W1033 */
|
33651
|
+
|
33652
|
+
const int func2(int i) /* W1033 */
|
33653
|
+
{
|
33654
|
+
return i + 1;
|
33655
|
+
}
|
33656
|
+
|
33657
|
+
const int *func3(int i) /* OK */
|
33658
|
+
{
|
33659
|
+
static int j;
|
33660
|
+
|
33661
|
+
j = i;
|
33662
|
+
return &j;
|
33663
|
+
}
|
33626
33664
|
@end verbatim
|
33627
33665
|
|
33628
33666
|
@subsection 関連メッセージ
|
@@ -33631,7 +33669,7 @@ static struct ST a[3]; /* W1032 */
|
|
33631
33669
|
|
33632
33670
|
@subsection 対応バージョン
|
33633
33671
|
|
33634
|
-
|
33672
|
+
1.4.0
|
33635
33673
|
|
33636
33674
|
@node W1034
|
33637
33675
|
@section W1034
|
@@ -34704,15 +34742,24 @@ unsigned int func(unsigned int a, unsigned int b)
|
|
34704
34742
|
|
34705
34743
|
@subsection 内容
|
34706
34744
|
|
34707
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
34708
|
-
|
34709
34745
|
非列挙型から列挙型への変換が生じています。
|
34710
34746
|
|
34711
34747
|
@subsection サンプルコード
|
34712
34748
|
|
34713
|
-
@c{未実装}
|
34714
34749
|
@verbatim
|
34715
|
-
|
34750
|
+
enum Color { RED, BLUE, GREEN };
|
34751
|
+
|
34752
|
+
int func(enum Color c)
|
34753
|
+
{
|
34754
|
+
switch (c) {
|
34755
|
+
case RED: /* OK */
|
34756
|
+
return 1;
|
34757
|
+
case 1: /* W1064 */
|
34758
|
+
return 2;
|
34759
|
+
}
|
34760
|
+
|
34761
|
+
return 0;
|
34762
|
+
}
|
34716
34763
|
@end verbatim
|
34717
34764
|
|
34718
34765
|
@subsection 関連メッセージ
|
@@ -34734,7 +34781,7 @@ unsigned int func(unsigned int a, unsigned int b)
|
|
34734
34781
|
|
34735
34782
|
@subsection 対応バージョン
|
34736
34783
|
|
34737
|
-
|
34784
|
+
1.4.0
|
34738
34785
|
|
34739
34786
|
@node W1065
|
34740
34787
|
@section W1065
|
@@ -34746,15 +34793,25 @@ unsigned int func(unsigned int a, unsigned int b)
|
|
34746
34793
|
|
34747
34794
|
@subsection 内容
|
34748
34795
|
|
34749
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
34750
|
-
|
34751
34796
|
列挙型から異なる列挙型への変換が生じています。
|
34752
34797
|
|
34753
34798
|
@subsection サンプルコード
|
34754
34799
|
|
34755
|
-
@c{未実装}
|
34756
34800
|
@verbatim
|
34757
|
-
|
34801
|
+
enum Color { RED, BLUE, GREEN };
|
34802
|
+
enum Fruits { APPLE, BANANA, ORANGE, GRAPE };
|
34803
|
+
|
34804
|
+
int func(enum Color c)
|
34805
|
+
{
|
34806
|
+
switch (c) {
|
34807
|
+
case RED: /* OK */
|
34808
|
+
return 1;
|
34809
|
+
case ORANGE: /* W1065 */
|
34810
|
+
return 2;
|
34811
|
+
}
|
34812
|
+
|
34813
|
+
return 0;
|
34814
|
+
}
|
34758
34815
|
@end verbatim
|
34759
34816
|
|
34760
34817
|
@subsection 関連メッセージ
|
@@ -34776,7 +34833,7 @@ unsigned int func(unsigned int a, unsigned int b)
|
|
34776
34833
|
|
34777
34834
|
@subsection 対応バージョン
|
34778
34835
|
|
34779
|
-
|
34836
|
+
1.4.0
|
34780
34837
|
|
34781
34838
|
@node W9001
|
34782
34839
|
@section W9001
|