adlint 1.2.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@
2
2
  @setfilename users_guide_ja.info
3
3
  @documentlanguage ja
4
4
  @documentencoding utf-8
5
- @settitle AdLint 1.2.0 利用者ガイド
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- @b{このメッセージは AdLint 2.0.0 で出力する予定です。}
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
- 2.0.0 の予定
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
- unsigned char* p;
29792
- unsigned short us = (unsigned short) p; /* W0721 */
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
- 2.0.0 の予定
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) /* int type is 32 bit long */
29815
+ int func(int a)
29822
29816
  {
29823
- if (a > 0 && a < 2147483647) {
29824
- return a + 1;
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- apple = 1,
29954
- banana,
29955
- orange
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- unsigned char uc = 500; /* W0738 */
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
- 2.0.0 の予定
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 ui = 5U - 10U; /* W0739 */
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
- 2.0.0 の予定
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
- #define MACRO (255)
30387
-
30388
- unsigned char uc = MACRO + 10; /* W0740 */
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- #define MACRO (255)
30485
-
30486
- signed char sc;
30504
+ /* when char is 8 bit long */
30505
+ const signed char sc1 = 127; /* OK */
30506
+ const signed char sc2 = 128; /* W0743 */
30487
30507
 
30488
- sc = MACRO + 150; /* W0743 */
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
- 2.0.0 の予定
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 ST { /* W0801 */
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 1.0.0
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
- 2.0.0 の予定
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
- 2.0.0 の予定
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
- 2.0.0 の予定
34836
+ 1.4.0
34780
34837
 
34781
34838
  @node W9001
34782
34839
  @section W9001