adlint 1.10.0 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +197 -4
- data/MANIFEST +17 -0
- data/NEWS +23 -4
- data/etc/mesg.d/en_US/messages.yml +14 -1
- data/etc/mesg.d/ja_JP/messages.yml +14 -1
- data/features/message_detection/W0093.feature +87 -0
- data/features/message_detection/W0687.feature +25 -0
- data/features/message_detection/W0688.feature +63 -0
- data/features/message_detection/W0689.feature +46 -0
- data/features/message_detection/W0690.feature +35 -0
- data/features/message_detection/W0698.feature +3 -2
- data/features/message_detection/W0703.feature +1 -0
- data/features/message_detection/W0723.feature +34 -0
- data/features/message_detection/W0732.feature +158 -0
- data/features/message_detection/W0733.feature +158 -0
- data/features/message_detection/W0734.feature +322 -0
- data/features/message_detection/W0735.feature +322 -0
- data/features/message_detection/W1052.feature +66 -0
- data/features/message_detection/W9001.feature +33 -0
- data/features/message_detection/W9003.feature +131 -0
- data/lib/adlint/c/ctrlexpr.rb +51 -50
- data/lib/adlint/c/domain.rb +237 -223
- data/lib/adlint/c/expr.rb +6 -8
- data/lib/adlint/c/interp.rb +8 -11
- data/lib/adlint/c/message.rb +20 -0
- data/lib/adlint/c/message_shima.rb +63 -0
- data/lib/adlint/c/object.rb +5 -4
- data/lib/adlint/c/operator.rb +99 -0
- data/lib/adlint/c/parser.rb +2 -2
- data/lib/adlint/c/parser.y +2 -2
- data/lib/adlint/c/phase.rb +6 -1
- data/lib/adlint/c/syntax.rb +442 -30
- data/lib/adlint/c/type.rb +449 -363
- data/lib/adlint/c/value.rb +96 -25
- data/lib/adlint/c.rb +1 -0
- data/lib/adlint/prelude.rb +16 -18
- data/lib/adlint/version.rb +2 -2
- data/share/doc/developers_guide_ja.html +11 -5
- data/share/doc/developers_guide_ja.texi +9 -3
- data/share/doc/users_guide_en.html +697 -131
- data/share/doc/users_guide_en.texi +491 -41
- data/share/doc/users_guide_ja.html +709 -139
- data/share/doc/users_guide_ja.texi +499 -45
- data/spec/adlint/c/ctrlexpr_spec.rb +168 -0
- data/spec/adlint/c/domain_spec.rb +835 -0
- data/spec/adlint/c/operator_spec.rb +406 -0
- data/spec/adlint/c/syntax_spec.rb +717 -0
- data/spec/adlint/c/type_spec.rb +55 -30
- metadata +19 -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.12.0 利用者ガイド
|
6
6
|
|
7
7
|
@copying
|
8
8
|
Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
|
@@ -2880,8 +2880,21 @@ context_line
|
|
2880
2880
|
* W1063::戻り値が列挙型の関数から、非定数式が返されています。
|
2881
2881
|
* W1064::列挙型の制御式が使われている switch 文で、整数定数が case ラベルに使われています。
|
2882
2882
|
* W1065::列挙型の制御式が使われている switch 文で、異なる列挙型の値が case ラベルに使われています。
|
2883
|
+
* W1066::明示的に float 型の複合式の値を double 型に変換しています。
|
2884
|
+
* W1067::明示的に float 型の複合式の値を long double 型に変換しています。
|
2885
|
+
* W1068::明示的に double 型の複合式の値を long double 型に変換しています。
|
2886
|
+
* W1069::この `if-else-if' 文には、末尾の `else' 節がありません。
|
2887
|
+
* W1070::この `switch' 文には実行経路が 2 つしか無いため、`if-else' 文に変換可能です。
|
2888
|
+
* W1071::関数 `%s' には複数の終了点があります。
|
2889
|
+
* W1072::`goto' 文を使用しています。
|
2890
|
+
* W1073::関数 `%s' の戻り値を破棄しています。
|
2891
|
+
* W1074::`sizeof' 演算子のオペランドは実行されないため、副作用が発生しません。
|
2892
|
+
* W1075::`%s' は以前に内部結合として宣言されていますが、この宣言には `static' がありません。
|
2893
|
+
* W1076::関数 `%s' は内部結合を持ちますが、事前に内部結合として宣言していません。
|
2894
|
+
* W1077::サイズが省略された配列を宣言しています。
|
2883
2895
|
* W9001::この文には制御が到達しません。
|
2884
2896
|
* W9002::ファイルの末尾に改行文字がありません。
|
2897
|
+
* W9003::暗黙的に `%s' 型のオブジェクトが異なる型のオブジェクトに変換されています。
|
2885
2898
|
* C0001::この外部識別名 `%s' で警告を検知しました。
|
2886
2899
|
@end menu
|
2887
2900
|
|
@@ -29043,7 +29056,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29043
29056
|
|
29044
29057
|
@subsection 内容
|
29045
29058
|
|
29046
|
-
@b{このメッセージは AdLint 2.0.0
|
29059
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
29047
29060
|
|
29048
29061
|
このような記述は、言語制約違反になりますので、移植性を低下させます。
|
29049
29062
|
|
@@ -29061,7 +29074,7 @@ defined 演算子を削除する目的で #undef を使っています。
|
|
29061
29074
|
|
29062
29075
|
@subsection 対応バージョン
|
29063
29076
|
|
29064
|
-
2.0.0
|
29077
|
+
2.0.0 以降の予定
|
29065
29078
|
|
29066
29079
|
@node W0694
|
29067
29080
|
@section W0694
|
@@ -29912,7 +29925,7 @@ int func(int a)
|
|
29912
29925
|
|
29913
29926
|
@subsection 内容
|
29914
29927
|
|
29915
|
-
@b{このメッセージは AdLint 2.0.0
|
29928
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
29916
29929
|
|
29917
29930
|
認識できない前処理指令を見つけたときの対処方法は処理系定義です。したがって、移植性が低下します。
|
29918
29931
|
|
@@ -29929,7 +29942,7 @@ int func(int a)
|
|
29929
29942
|
|
29930
29943
|
@subsection 対応バージョン
|
29931
29944
|
|
29932
|
-
2.0.0
|
29945
|
+
2.0.0 以降の予定
|
29933
29946
|
|
29934
29947
|
@node W0726
|
29935
29948
|
@section W0726
|
@@ -30168,15 +30181,20 @@ int func(enum Color c)
|
|
30168
30181
|
|
30169
30182
|
@subsection 内容
|
30170
30183
|
|
30171
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30172
|
-
|
30173
30184
|
このような記述は誤りの可能性があります。
|
30174
30185
|
|
30175
30186
|
@subsection サンプルコード
|
30176
30187
|
|
30177
|
-
@c{未実装}
|
30178
30188
|
@verbatim
|
30179
|
-
|
30189
|
+
extern void func(unsigned int a, unsigned int b,unsigned int c, unsigned int d)
|
30190
|
+
{
|
30191
|
+
int r;
|
30192
|
+
r = (a + b) && (c - d); /* W0732 */
|
30193
|
+
r = (a * b) && (c / d); /* W0732 */
|
30194
|
+
|
30195
|
+
r = (a << b) && (c << d); /* W0732 */
|
30196
|
+
r = (a >> b) && (c >> d); /* W0732 */
|
30197
|
+
}
|
30180
30198
|
@end verbatim
|
30181
30199
|
|
30182
30200
|
@subsection 関連メッセージ
|
@@ -30189,7 +30207,7 @@ int func(enum Color c)
|
|
30189
30207
|
|
30190
30208
|
@subsection 対応バージョン
|
30191
30209
|
|
30192
|
-
|
30210
|
+
1.12.0
|
30193
30211
|
|
30194
30212
|
@node W0733
|
30195
30213
|
@section W0733
|
@@ -30201,15 +30219,20 @@ int func(enum Color c)
|
|
30201
30219
|
|
30202
30220
|
@subsection 内容
|
30203
30221
|
|
30204
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30205
|
-
|
30206
30222
|
このような記述は誤りの可能性があります。
|
30207
30223
|
|
30208
30224
|
@subsection サンプルコード
|
30209
30225
|
|
30210
|
-
@c{未実装}
|
30211
30226
|
@verbatim
|
30212
|
-
|
30227
|
+
extern void func(unsigned int a, unsigned int b,unsigned int c, unsigned int d)
|
30228
|
+
{
|
30229
|
+
int r;
|
30230
|
+
r = (a + b) || (c - d); /* W0733 */
|
30231
|
+
r = (a * b) || (c / d); /* W0733 */
|
30232
|
+
|
30233
|
+
r = (a << b) || (c << d); /* W0733 */
|
30234
|
+
r = (a >> b) || (c >> d); /* W0733 */
|
30235
|
+
}
|
30213
30236
|
@end verbatim
|
30214
30237
|
|
30215
30238
|
@subsection 関連メッセージ
|
@@ -30222,7 +30245,7 @@ int func(enum Color c)
|
|
30222
30245
|
|
30223
30246
|
@subsection 対応バージョン
|
30224
30247
|
|
30225
|
-
|
30248
|
+
1.12.0
|
30226
30249
|
|
30227
30250
|
@node W0734
|
30228
30251
|
@section W0734
|
@@ -30234,15 +30257,20 @@ int func(enum Color c)
|
|
30234
30257
|
|
30235
30258
|
@subsection 内容
|
30236
30259
|
|
30237
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30238
|
-
|
30239
30260
|
このような記述は誤りの可能性があります。
|
30240
30261
|
|
30241
30262
|
@subsection サンプルコード
|
30242
30263
|
|
30243
|
-
@c{未実装}
|
30244
30264
|
@verbatim
|
30245
|
-
|
30265
|
+
extern void func(unsigned int a, unsigned int b, unsigned int c)
|
30266
|
+
{
|
30267
|
+
int r;
|
30268
|
+
r = (a + b) && c; /* W0734 */
|
30269
|
+
r = (a - b) && c; /* W0734 */
|
30270
|
+
|
30271
|
+
r = (a << b) || c; /* W0734 */
|
30272
|
+
r = (a >> b) || c; /* W0734 */
|
30273
|
+
}
|
30246
30274
|
@end verbatim
|
30247
30275
|
|
30248
30276
|
@subsection 関連メッセージ
|
@@ -30255,7 +30283,7 @@ int func(enum Color c)
|
|
30255
30283
|
|
30256
30284
|
@subsection 対応バージョン
|
30257
30285
|
|
30258
|
-
|
30286
|
+
1.12.0
|
30259
30287
|
|
30260
30288
|
@node W0735
|
30261
30289
|
@section W0735
|
@@ -30267,15 +30295,20 @@ int func(enum Color c)
|
|
30267
30295
|
|
30268
30296
|
@subsection 内容
|
30269
30297
|
|
30270
|
-
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
30271
|
-
|
30272
30298
|
このような記述は誤りの可能性があります。
|
30273
30299
|
|
30274
30300
|
@subsection サンプルコード
|
30275
30301
|
|
30276
|
-
@c{未実装}
|
30277
30302
|
@verbatim
|
30278
|
-
|
30303
|
+
extern void func(unsigned int a, unsigned int b, unsigned int c)
|
30304
|
+
{
|
30305
|
+
int r;
|
30306
|
+
r = a && (b + c); /* W0735 */
|
30307
|
+
r = a && (b - c); /* W0735 */
|
30308
|
+
|
30309
|
+
r = a || (b >> c); /* W0735 */
|
30310
|
+
r = a || (b << c); /* W0735 */
|
30311
|
+
}
|
30279
30312
|
@end verbatim
|
30280
30313
|
|
30281
30314
|
@subsection 関連メッセージ
|
@@ -30288,7 +30321,7 @@ int func(enum Color c)
|
|
30288
30321
|
|
30289
30322
|
@subsection 対応バージョン
|
30290
30323
|
|
30291
|
-
|
30324
|
+
1.12.0
|
30292
30325
|
|
30293
30326
|
@node W0736
|
30294
30327
|
@section W0736
|
@@ -32165,7 +32198,7 @@ int foo(const int i)
|
|
32165
32198
|
|
32166
32199
|
@subsection 内容
|
32167
32200
|
|
32168
|
-
@b{このメッセージは AdLint 2.0.0
|
32201
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
32169
32202
|
|
32170
32203
|
未定義の拡張表記を使用した場合の動作は未定義です。したがって、予期しない動作を引き起こす可能性があります。
|
32171
32204
|
|
@@ -32182,7 +32215,7 @@ int foo(const int i)
|
|
32182
32215
|
|
32183
32216
|
@subsection 対応バージョン
|
32184
32217
|
|
32185
|
-
2.0.0
|
32218
|
+
2.0.0 以降の予定
|
32186
32219
|
|
32187
32220
|
@node W0785
|
32188
32221
|
@section W0785
|
@@ -32810,7 +32843,7 @@ struct bar { /* W0801 */
|
|
32810
32843
|
|
32811
32844
|
@subsection 内容
|
32812
32845
|
|
32813
|
-
@b{このメッセージは AdLint 2.0.0
|
32846
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
32814
32847
|
|
32815
32848
|
@code{#include <ファイル名>} または @code{#include "ファイル名"} 以外の形式で記述されている @code{#include} 文の動作は未定義になります。
|
32816
32849
|
従って、予期しない動作を引き起こす可能性があります。"
|
@@ -32830,7 +32863,7 @@ struct bar { /* W0801 */
|
|
32830
32863
|
|
32831
32864
|
@subsection 対応バージョン
|
32832
32865
|
|
32833
|
-
2.0.0
|
32866
|
+
2.0.0 以降の予定
|
32834
32867
|
|
32835
32868
|
@node W0803
|
32836
32869
|
@section W0803
|
@@ -32842,7 +32875,7 @@ struct bar { /* W0801 */
|
|
32842
32875
|
|
32843
32876
|
@subsection 内容
|
32844
32877
|
|
32845
|
-
@b{このメッセージは AdLint 2.0.0
|
32878
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
32846
32879
|
|
32847
32880
|
このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。
|
32848
32881
|
|
@@ -32859,7 +32892,7 @@ struct bar { /* W0801 */
|
|
32859
32892
|
|
32860
32893
|
@subsection 対応バージョン
|
32861
32894
|
|
32862
|
-
2.0.0
|
32895
|
+
2.0.0 以降の予定
|
32863
32896
|
|
32864
32897
|
@node W0804
|
32865
32898
|
@section W0804
|
@@ -33355,7 +33388,7 @@ long long a = 0; /* W0834 */
|
|
33355
33388
|
|
33356
33389
|
@subsection 内容
|
33357
33390
|
|
33358
|
-
@b{このメッセージは AdLint 2.0.0
|
33391
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
33359
33392
|
|
33360
33393
|
可変個引数マクロの定義は、言語拡張に該当するため、移植性を低下させます。
|
33361
33394
|
|
@@ -33372,7 +33405,7 @@ long long a = 0; /* W0834 */
|
|
33372
33405
|
|
33373
33406
|
@subsection 対応バージョン
|
33374
33407
|
|
33375
|
-
2.0.0
|
33408
|
+
2.0.0 以降の予定
|
33376
33409
|
|
33377
33410
|
@node W0947
|
33378
33411
|
@section W0947
|
@@ -33796,7 +33829,7 @@ int func(void)
|
|
33796
33829
|
|
33797
33830
|
@subsection 内容
|
33798
33831
|
|
33799
|
-
@b{このメッセージは AdLint 2.0.0
|
33832
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
33800
33833
|
|
33801
33834
|
@code{typedef} の再定義は未定義の動作になります。
|
33802
33835
|
|
@@ -33815,7 +33848,7 @@ int func(void)
|
|
33815
33848
|
|
33816
33849
|
@subsection 対応バージョン
|
33817
33850
|
|
33818
|
-
2.0.0
|
33851
|
+
2.0.0 以降の予定
|
33819
33852
|
|
33820
33853
|
@node W1036
|
33821
33854
|
@section W1036
|
@@ -33827,7 +33860,7 @@ int func(void)
|
|
33827
33860
|
|
33828
33861
|
@subsection 内容
|
33829
33862
|
|
33830
|
-
@b{このメッセージは AdLint 2.0.0
|
33863
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
33831
33864
|
|
33832
33865
|
@code{typedef} の再定義は未定義の動作になります。
|
33833
33866
|
|
@@ -33846,7 +33879,7 @@ int func(void)
|
|
33846
33879
|
|
33847
33880
|
@subsection 対応バージョン
|
33848
33881
|
|
33849
|
-
2.0.0
|
33882
|
+
2.0.0 以降の予定
|
33850
33883
|
|
33851
33884
|
@node W1037
|
33852
33885
|
@section W1037
|
@@ -33986,7 +34019,7 @@ extern long a; /* W1037 */
|
|
33986
34019
|
|
33987
34020
|
@subsection 内容
|
33988
34021
|
|
33989
|
-
@b{このメッセージは AdLint 2.0.0
|
34022
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
33990
34023
|
|
33991
34024
|
このような前処理指令の記述は、ISO C90 標準規格ではサポートされていません。
|
33992
34025
|
|
@@ -34006,7 +34039,7 @@ extern long a; /* W1037 */
|
|
34006
34039
|
|
34007
34040
|
@subsection 対応バージョン
|
34008
34041
|
|
34009
|
-
2.0.0
|
34042
|
+
2.0.0 以降の予定
|
34010
34043
|
|
34011
34044
|
@node W1043
|
34012
34045
|
@section W1043
|
@@ -34018,7 +34051,7 @@ extern long a; /* W1037 */
|
|
34018
34051
|
|
34019
34052
|
@subsection 内容
|
34020
34053
|
|
34021
|
-
@b{このメッセージは AdLint 2.0.0
|
34054
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
34022
34055
|
|
34023
34056
|
このような構文記述は、ISO C90 標準規格ではサポートされていないため、言語拡張とみなされます。
|
34024
34057
|
|
@@ -34038,7 +34071,7 @@ extern long a; /* W1037 */
|
|
34038
34071
|
|
34039
34072
|
@subsection 対応バージョン
|
34040
34073
|
|
34041
|
-
2.0.0
|
34074
|
+
2.0.0 以降の予定
|
34042
34075
|
|
34043
34076
|
@node W1044
|
34044
34077
|
@section W1044
|
@@ -34082,7 +34115,7 @@ extern long a; /* W1037 */
|
|
34082
34115
|
|
34083
34116
|
@subsection 内容
|
34084
34117
|
|
34085
|
-
@b{このメッセージは AdLint 2.0.0
|
34118
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
34086
34119
|
|
34087
34120
|
このような構文記述は、ISO C90 標準規格ではサポートされていないため、言語拡張とみなされます。
|
34088
34121
|
|
@@ -34102,7 +34135,7 @@ extern long a; /* W1037 */
|
|
34102
34135
|
|
34103
34136
|
@subsection 対応バージョン
|
34104
34137
|
|
34105
|
-
2.0.0
|
34138
|
+
2.0.0 以降の予定
|
34106
34139
|
|
34107
34140
|
@node W1046
|
34108
34141
|
@section W1046
|
@@ -34172,7 +34205,7 @@ ISO C 規格ではバックスラッシュ文字の後に直接改行文字が
|
|
34172
34205
|
|
34173
34206
|
@subsection 内容
|
34174
34207
|
|
34175
|
-
@b{このメッセージは AdLint 2.0.0
|
34208
|
+
@b{このメッセージは AdLint 2.0.0 以降で出力する予定です。}
|
34176
34209
|
|
34177
34210
|
マルチバイト文字定数が使用されています。この値やサイズは処理系によって異なるため、移植性が低下します。
|
34178
34211
|
|
@@ -34189,7 +34222,7 @@ ISO C 規格ではバックスラッシュ文字の後に直接改行文字が
|
|
34189
34222
|
|
34190
34223
|
@subsection 対応バージョン
|
34191
34224
|
|
34192
|
-
2.0.0
|
34225
|
+
2.0.0 以降の予定
|
34193
34226
|
|
34194
34227
|
@node W1049
|
34195
34228
|
@section W1049
|
@@ -34959,6 +34992,392 @@ int func(enum Color c)
|
|
34959
34992
|
|
34960
34993
|
1.4.0
|
34961
34994
|
|
34995
|
+
@node W1066
|
34996
|
+
@section W1066
|
34997
|
+
@cindex W1066
|
34998
|
+
|
34999
|
+
@subsection メッセージ本文
|
35000
|
+
|
35001
|
+
明示的に float 型の複合式の値を double 型に変換しています。
|
35002
|
+
|
35003
|
+
@subsection 内容
|
35004
|
+
|
35005
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35006
|
+
|
35007
|
+
例えばサンプルコードでは @code{float} 型変数 @code{a} の 2 乗した値が @code{float} 型の範囲に収まらないことを想定して
|
35008
|
+
@code{double} 型変数 @code{b} へ代入しています。しかし、環境によっては @code{a * a} の演算はいったん @code{float} 型として
|
35009
|
+
結果を出したあとに @code{double} 型にキャストされ、@code{b} へ代入される場合があります。その場合、@code{a} の値によっては精度落ちが起こります。
|
35010
|
+
|
35011
|
+
@subsection サンプルコード
|
35012
|
+
|
35013
|
+
@verbatim
|
35014
|
+
void func(float a)
|
35015
|
+
{
|
35016
|
+
double b = (double) (a * a);
|
35017
|
+
}
|
35018
|
+
@end verbatim
|
35019
|
+
|
35020
|
+
@subsection 関連メッセージ
|
35021
|
+
|
35022
|
+
@itemize
|
35023
|
+
@item @ref{W1067} 明示的に float 型の複合式の値を long double 型に変換しています。
|
35024
|
+
@item @ref{W1068} 明示的に double 型の複合式の値を long double 型に変換しています。
|
35025
|
+
@end itemize
|
35026
|
+
|
35027
|
+
@subsection 対応バージョン
|
35028
|
+
|
35029
|
+
2.0.0 の予定
|
35030
|
+
|
35031
|
+
@node W1067
|
35032
|
+
@section W1067
|
35033
|
+
@cindex W1067
|
35034
|
+
|
35035
|
+
@subsection メッセージ本文
|
35036
|
+
|
35037
|
+
明示的に float 型の複合式の値を long double 型に変換しています。
|
35038
|
+
|
35039
|
+
@subsection 内容
|
35040
|
+
|
35041
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35042
|
+
|
35043
|
+
例えばサンプルコードでは @code{float} 型変数 @code{a} の 2 乗した値が @code{float} 型の範囲に収まらないことを想定して
|
35044
|
+
@code{long double} 型変数 @code{b} へ代入しています。しかし、環境によっては @code{a * a} の演算はいったん @code{float} 型として
|
35045
|
+
結果を出したあとに @code{long double} 型にキャストされ、@code{b} へ代入される場合があります。その場合、@code{a} の値によっては精度落ちが起こります。
|
35046
|
+
|
35047
|
+
@subsection サンプルコード
|
35048
|
+
|
35049
|
+
@verbatim
|
35050
|
+
void func(float a)
|
35051
|
+
{
|
35052
|
+
long double b = (long double) (a * a);
|
35053
|
+
}
|
35054
|
+
@end verbatim
|
35055
|
+
|
35056
|
+
@subsection 関連メッセージ
|
35057
|
+
|
35058
|
+
@itemize
|
35059
|
+
@item @ref{W1066} 明示的に float 型の複合式の値を double 型に変換しています。
|
35060
|
+
@item @ref{W1068} 明示的に double 型の複合式の値を long double 型に変換しています。
|
35061
|
+
@end itemize
|
35062
|
+
|
35063
|
+
@subsection 対応バージョン
|
35064
|
+
|
35065
|
+
2.0.0 の予定
|
35066
|
+
|
35067
|
+
@node W1068
|
35068
|
+
@section W1068
|
35069
|
+
@cindex W1068
|
35070
|
+
|
35071
|
+
@subsection メッセージ本文
|
35072
|
+
|
35073
|
+
明示的に double 型の複合式の値を long double 型に変換しています。
|
35074
|
+
|
35075
|
+
@subsection 内容
|
35076
|
+
|
35077
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35078
|
+
|
35079
|
+
例えばサンプルコードでは @code{double} 型変数 @code{a} の 2 乗した値が @code{double} 型の範囲に収まらないことを想定して
|
35080
|
+
@code{long double} 型変数 @code{b} へ代入しています。しかし、環境によっては @code{a * a} の演算はいったん @code{double} 型として
|
35081
|
+
結果を出したあとに @code{long double} 型にキャストされ、@code{b} へ代入される場合があります。その場合、@code{a} の値によっては精度落ちが起こります。
|
35082
|
+
|
35083
|
+
@subsection サンプルコード
|
35084
|
+
|
35085
|
+
@verbatim
|
35086
|
+
void func(double a)
|
35087
|
+
{
|
35088
|
+
long double b = (long double) (a * a);
|
35089
|
+
}
|
35090
|
+
@end verbatim
|
35091
|
+
|
35092
|
+
@subsection 関連メッセージ
|
35093
|
+
|
35094
|
+
@itemize
|
35095
|
+
@item @ref{W1066} 明示的に float 型の複合式の値を double 型に変換しています。
|
35096
|
+
@item @ref{W1067} 明示的に float 型の複合式の値を long double 型に変換しています。
|
35097
|
+
@end itemize
|
35098
|
+
|
35099
|
+
@subsection 対応バージョン
|
35100
|
+
|
35101
|
+
2.0.0 の予定
|
35102
|
+
|
35103
|
+
@node W1069
|
35104
|
+
@section W1069
|
35105
|
+
@cindex W1069
|
35106
|
+
|
35107
|
+
@subsection メッセージ本文
|
35108
|
+
|
35109
|
+
この `if-else-if' 文には、末尾の `else' 節がありません。
|
35110
|
+
|
35111
|
+
|
35112
|
+
@subsection 内容
|
35113
|
+
|
35114
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35115
|
+
|
35116
|
+
@code{else} 節がないと、 @code{else} 節を書き忘れているのか、 @code{else} 節が発生しない @code{if-else if} 文なのかが分からず、混乱を招きます。
|
35117
|
+
|
35118
|
+
@subsection サンプルコード
|
35119
|
+
|
35120
|
+
@verbatim
|
35121
|
+
/* 追記予定 */
|
35122
|
+
@end verbatim
|
35123
|
+
|
35124
|
+
@subsection 関連メッセージ
|
35125
|
+
|
35126
|
+
なし。
|
35127
|
+
|
35128
|
+
@subsection 対応バージョン
|
35129
|
+
|
35130
|
+
2.0.0 の予定
|
35131
|
+
|
35132
|
+
@node W1070
|
35133
|
+
@section W1070
|
35134
|
+
@cindex W1070
|
35135
|
+
|
35136
|
+
@subsection メッセージ本文
|
35137
|
+
|
35138
|
+
この `switch' 文には実行経路が 2 つしか無いため、`if-else' 文に変換可能です。
|
35139
|
+
|
35140
|
+
@subsection 内容
|
35141
|
+
|
35142
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35143
|
+
|
35144
|
+
深刻な問題ではありませんが、通常 @code{switch} 文は 2 つ以上の分岐があることが想定されるので、
|
35145
|
+
@code{case} 節が 1 つしかない @code{switch} 文では、実行パスの定義漏れが疑われます。
|
35146
|
+
|
35147
|
+
@subsection サンプルコード
|
35148
|
+
|
35149
|
+
@verbatim
|
35150
|
+
switch (x) {
|
35151
|
+
case 1:
|
35152
|
+
...
|
35153
|
+
break;
|
35154
|
+
default:
|
35155
|
+
...
|
35156
|
+
}
|
35157
|
+
@end verbatim
|
35158
|
+
|
35159
|
+
@subsection 関連メッセージ
|
35160
|
+
|
35161
|
+
なし。
|
35162
|
+
|
35163
|
+
@subsection 対応バージョン
|
35164
|
+
|
35165
|
+
2.0.0 の予定
|
35166
|
+
|
35167
|
+
@node W1071
|
35168
|
+
@section W1071
|
35169
|
+
@cindex W1071
|
35170
|
+
|
35171
|
+
@subsection メッセージ本文
|
35172
|
+
|
35173
|
+
関数 `%s' には複数の終了点があります。
|
35174
|
+
|
35175
|
+
@subsection 内容
|
35176
|
+
|
35177
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35178
|
+
|
35179
|
+
出口となる @code{return} 文が関数内に複数個存在しています。
|
35180
|
+
|
35181
|
+
@subsection サンプルコード
|
35182
|
+
|
35183
|
+
@verbatim
|
35184
|
+
int func(int a)
|
35185
|
+
{
|
35186
|
+
if (a == 0) {
|
35187
|
+
return 0;
|
35188
|
+
}
|
35189
|
+
else {
|
35190
|
+
return 1; /* W1071 */
|
35191
|
+
}
|
35192
|
+
}
|
35193
|
+
@end verbatim
|
35194
|
+
|
35195
|
+
@subsection 関連メッセージ
|
35196
|
+
|
35197
|
+
なし。
|
35198
|
+
|
35199
|
+
@subsection 対応バージョン
|
35200
|
+
|
35201
|
+
2.0.0 の予定
|
35202
|
+
|
35203
|
+
@node W1072
|
35204
|
+
@section W1072
|
35205
|
+
@cindex W1072
|
35206
|
+
|
35207
|
+
@subsection メッセージ本文
|
35208
|
+
|
35209
|
+
`goto' 文を使用しています。
|
35210
|
+
|
35211
|
+
@subsection 内容
|
35212
|
+
|
35213
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35214
|
+
|
35215
|
+
ファイル内で @code{goto} 文が使用されています。
|
35216
|
+
|
35217
|
+
@subsection サンプルコード
|
35218
|
+
|
35219
|
+
@verbatim
|
35220
|
+
/* 追記予定 */
|
35221
|
+
@end verbatim
|
35222
|
+
|
35223
|
+
@subsection 関連メッセージ
|
35224
|
+
|
35225
|
+
なし。
|
35226
|
+
|
35227
|
+
@subsection 対応バージョン
|
35228
|
+
|
35229
|
+
2.0.0 の予定
|
35230
|
+
|
35231
|
+
@node W1073
|
35232
|
+
@section W1073
|
35233
|
+
@cindex W1073
|
35234
|
+
|
35235
|
+
@subsection メッセージ本文
|
35236
|
+
|
35237
|
+
関数 `%s' の戻り値を破棄しています。
|
35238
|
+
|
35239
|
+
@subsection 内容
|
35240
|
+
|
35241
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35242
|
+
|
35243
|
+
関数の戻り値が使用されていない場合、その戻り値は無駄な要素といえます。コード中に無駄な要素があることで解析性が低下します。
|
35244
|
+
また、使用されない戻り値が多いことは、戻り値のチェックも怠っていることが推測されるため、障害許容性が低下している可能性が高いといえます。
|
35245
|
+
|
35246
|
+
@subsection サンプルコード
|
35247
|
+
|
35248
|
+
@verbatim
|
35249
|
+
/* 追記予定 */
|
35250
|
+
@end verbatim
|
35251
|
+
|
35252
|
+
@subsection 関連メッセージ
|
35253
|
+
|
35254
|
+
なし。
|
35255
|
+
|
35256
|
+
@subsection 対応バージョン
|
35257
|
+
|
35258
|
+
2.0.0 の予定
|
35259
|
+
|
35260
|
+
@node W1074
|
35261
|
+
@section W1074
|
35262
|
+
@cindex W1074
|
35263
|
+
|
35264
|
+
@subsection メッセージ本文
|
35265
|
+
|
35266
|
+
`sizeof' 演算子のオペランドは実行されないため、副作用が発生しません。
|
35267
|
+
|
35268
|
+
@subsection 内容
|
35269
|
+
|
35270
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35271
|
+
|
35272
|
+
サンプルコードで示したソースコードの場合、@code{sizeof} 演算子は式を評価しないため、@code{data++} は実行されません。
|
35273
|
+
従って @code{data++} が実行されていることが前提だとすると様々な予期しない問題が起きる可能性があります。
|
35274
|
+
|
35275
|
+
@subsection サンプルコード
|
35276
|
+
|
35277
|
+
@verbatim
|
35278
|
+
int i = sizeof(data++); /* W1074 */
|
35279
|
+
@end verbatim
|
35280
|
+
|
35281
|
+
@subsection 関連メッセージ
|
35282
|
+
|
35283
|
+
なし。
|
35284
|
+
|
35285
|
+
@subsection 対応バージョン
|
35286
|
+
|
35287
|
+
2.0.0 の予定
|
35288
|
+
|
35289
|
+
@node W1075
|
35290
|
+
@section W1075
|
35291
|
+
@cindex W1075
|
35292
|
+
|
35293
|
+
@subsection メッセージ本文
|
35294
|
+
|
35295
|
+
`%s' は以前に内部結合として宣言されていますが、この宣言には `static' がありません。
|
35296
|
+
|
35297
|
+
@subsection 内容
|
35298
|
+
|
35299
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35300
|
+
|
35301
|
+
static 記憶域クラス指定子が明示されていません。
|
35302
|
+
|
35303
|
+
@subsection サンプルコード
|
35304
|
+
|
35305
|
+
@verbatim
|
35306
|
+
static int func(void);
|
35307
|
+
int func(void) /* W1075 */
|
35308
|
+
{
|
35309
|
+
...
|
35310
|
+
}
|
35311
|
+
@end verbatim
|
35312
|
+
|
35313
|
+
@subsection 関連メッセージ
|
35314
|
+
|
35315
|
+
なし。
|
35316
|
+
|
35317
|
+
@subsection 対応バージョン
|
35318
|
+
|
35319
|
+
2.0.0 の予定
|
35320
|
+
|
35321
|
+
@node W1076
|
35322
|
+
@section W1076
|
35323
|
+
@cindex W1076
|
35324
|
+
|
35325
|
+
@subsection メッセージ本文
|
35326
|
+
|
35327
|
+
関数 `%s' は内部結合を持ちますが、事前に内部結合として宣言していません。
|
35328
|
+
|
35329
|
+
@subsection 内容
|
35330
|
+
|
35331
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35332
|
+
|
35333
|
+
関数プロトタイプ宣言がないまま static 記憶域クラス指定子付きの関数が定義されています。
|
35334
|
+
|
35335
|
+
@subsection サンプルコード
|
35336
|
+
|
35337
|
+
@verbatim
|
35338
|
+
static int func(void) /* W1076 */
|
35339
|
+
{
|
35340
|
+
...
|
35341
|
+
return ret;
|
35342
|
+
}
|
35343
|
+
@end verbatim
|
35344
|
+
|
35345
|
+
@subsection 関連メッセージ
|
35346
|
+
|
35347
|
+
なし。
|
35348
|
+
|
35349
|
+
@subsection 対応バージョン
|
35350
|
+
|
35351
|
+
2.0.0 の予定
|
35352
|
+
|
35353
|
+
@node W1077
|
35354
|
+
@section W1077
|
35355
|
+
@cindex W1077
|
35356
|
+
|
35357
|
+
@subsection メッセージ本文
|
35358
|
+
|
35359
|
+
サイズが省略された配列を宣言しています。
|
35360
|
+
|
35361
|
+
@subsection 内容
|
35362
|
+
|
35363
|
+
@b{このメッセージは AdLint 2.0.0 で出力する予定です。}
|
35364
|
+
|
35365
|
+
この配列は、サイズが明示されていません。
|
35366
|
+
|
35367
|
+
@subsection サンプルコード
|
35368
|
+
|
35369
|
+
@verbatim
|
35370
|
+
extern int array[]; /* W1077 */
|
35371
|
+
@end verbatim
|
35372
|
+
|
35373
|
+
@subsection 関連メッセージ
|
35374
|
+
|
35375
|
+
なし。
|
35376
|
+
|
35377
|
+
@subsection 対応バージョン
|
35378
|
+
|
35379
|
+
2.0.0 の予定
|
35380
|
+
|
34962
35381
|
@node W9001
|
34963
35382
|
@section W9001
|
34964
35383
|
@cindex W9001
|
@@ -35042,6 +35461,41 @@ void func(void)
|
|
35042
35461
|
|
35043
35462
|
1.0.0
|
35044
35463
|
|
35464
|
+
@node W9003
|
35465
|
+
@section W9003
|
35466
|
+
@cindex W9003
|
35467
|
+
|
35468
|
+
@subsection メッセージ本文
|
35469
|
+
|
35470
|
+
暗黙的に `%s' 型のオブジェクトが異なる型のオブジェクトに変換されています。
|
35471
|
+
|
35472
|
+
@subsection 内容
|
35473
|
+
|
35474
|
+
変換元または変換先の型が非標準型である暗黙的な変換が発生することを示します。
|
35475
|
+
|
35476
|
+
@subsection サンプルコード
|
35477
|
+
|
35478
|
+
@verbatim
|
35479
|
+
enum Color { RED, BLUE, GREEN };
|
35480
|
+
enum Fruit { APPLE, BANANA, ORANGE };
|
35481
|
+
|
35482
|
+
extern void foo(enum Color);
|
35483
|
+
|
35484
|
+
static void bar(void)
|
35485
|
+
{
|
35486
|
+
int i = RED; /* W9003 */
|
35487
|
+
foo(ORANGE); /* W9003 */
|
35488
|
+
}
|
35489
|
+
@end verbatim
|
35490
|
+
|
35491
|
+
@subsection 関連メッセージ
|
35492
|
+
|
35493
|
+
なし。
|
35494
|
+
|
35495
|
+
@subsection 対応バージョン
|
35496
|
+
|
35497
|
+
1.12.0
|
35498
|
+
|
35045
35499
|
@node C0001
|
35046
35500
|
@section C0001
|
35047
35501
|
@cindex C0001
|