adlint 1.10.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/ChangeLog +197 -4
  2. data/MANIFEST +17 -0
  3. data/NEWS +23 -4
  4. data/etc/mesg.d/en_US/messages.yml +14 -1
  5. data/etc/mesg.d/ja_JP/messages.yml +14 -1
  6. data/features/message_detection/W0093.feature +87 -0
  7. data/features/message_detection/W0687.feature +25 -0
  8. data/features/message_detection/W0688.feature +63 -0
  9. data/features/message_detection/W0689.feature +46 -0
  10. data/features/message_detection/W0690.feature +35 -0
  11. data/features/message_detection/W0698.feature +3 -2
  12. data/features/message_detection/W0703.feature +1 -0
  13. data/features/message_detection/W0723.feature +34 -0
  14. data/features/message_detection/W0732.feature +158 -0
  15. data/features/message_detection/W0733.feature +158 -0
  16. data/features/message_detection/W0734.feature +322 -0
  17. data/features/message_detection/W0735.feature +322 -0
  18. data/features/message_detection/W1052.feature +66 -0
  19. data/features/message_detection/W9001.feature +33 -0
  20. data/features/message_detection/W9003.feature +131 -0
  21. data/lib/adlint/c/ctrlexpr.rb +51 -50
  22. data/lib/adlint/c/domain.rb +237 -223
  23. data/lib/adlint/c/expr.rb +6 -8
  24. data/lib/adlint/c/interp.rb +8 -11
  25. data/lib/adlint/c/message.rb +20 -0
  26. data/lib/adlint/c/message_shima.rb +63 -0
  27. data/lib/adlint/c/object.rb +5 -4
  28. data/lib/adlint/c/operator.rb +99 -0
  29. data/lib/adlint/c/parser.rb +2 -2
  30. data/lib/adlint/c/parser.y +2 -2
  31. data/lib/adlint/c/phase.rb +6 -1
  32. data/lib/adlint/c/syntax.rb +442 -30
  33. data/lib/adlint/c/type.rb +449 -363
  34. data/lib/adlint/c/value.rb +96 -25
  35. data/lib/adlint/c.rb +1 -0
  36. data/lib/adlint/prelude.rb +16 -18
  37. data/lib/adlint/version.rb +2 -2
  38. data/share/doc/developers_guide_ja.html +11 -5
  39. data/share/doc/developers_guide_ja.texi +9 -3
  40. data/share/doc/users_guide_en.html +697 -131
  41. data/share/doc/users_guide_en.texi +491 -41
  42. data/share/doc/users_guide_ja.html +709 -139
  43. data/share/doc/users_guide_ja.texi +499 -45
  44. data/spec/adlint/c/ctrlexpr_spec.rb +168 -0
  45. data/spec/adlint/c/domain_spec.rb +835 -0
  46. data/spec/adlint/c/operator_spec.rb +406 -0
  47. data/spec/adlint/c/syntax_spec.rb +717 -0
  48. data/spec/adlint/c/type_spec.rb +55 -30
  49. 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.10.0 利用者ガイド
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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