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.
@@ -1,8 +1,8 @@
1
1
  <html lang="ja">
2
2
  <head>
3
- <title>AdLint 1.2.0 利用者ガイド</title>
3
+ <title>AdLint 1.4.0 利用者ガイド</title>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
- <meta name="description" content="AdLint 1.2.0 利用者ガイド">
5
+ <meta name="description" content="AdLint 1.4.0 利用者ガイド">
6
6
  <meta name="generator" content="makeinfo 4.13">
7
7
  <link title="Top" rel="top" href="#Top">
8
8
  <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
44
44
  --></style>
45
45
  </head>
46
46
  <body>
47
- <h1 class="settitle">AdLint 1.2.0 利用者ガイド</h1>
47
+ <h1 class="settitle">AdLint 1.4.0 利用者ガイド</h1>
48
48
  <div class="node">
49
49
  <a name="Top"></a>
50
50
  <p><hr>
@@ -2749,7 +2749,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
2749
2749
  <li><a href="#W0722">W0722</a>: 符号付きの式の値がオーバーフローしています。
2750
2750
  <li><a href="#W0723">W0723</a>: 符号付きの式の値がオーバーフローする可能性があります。
2751
2751
  <li><a href="#W0724">W0724</a>: 条件付きインクルード指令によって、認識できない前処理指令が無視されました。
2752
- <li><a href="#W0726">W0726</a>: 修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式 ;' が見つかりました。
2752
+ <li><a href="#W0726">W0726</a>: 修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式;' が見つかりました。
2753
2753
  <li><a href="#W0727">W0727</a>: 列挙型にない値を使っています。
2754
2754
  <li><a href="#W0728">W0728</a>: 列挙型の関数仮引数に、別の列挙型の列挙定数が実引数として渡されています。
2755
2755
  <li><a href="#W0729">W0729</a>: 列挙型のオブジェクトに、別の列挙型の列挙定数が代入されています。
@@ -6015,7 +6015,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
6015
6015
 
6016
6016
  <h4 class="subsection">6.80.4 関連メッセージ</h4>
6017
6017
 
6018
- <p>なし
6018
+ <p>なし。
6019
6019
 
6020
6020
  <h4 class="subsection">6.80.5 対応バージョン</h4>
6021
6021
 
@@ -29587,14 +29587,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
29587
29587
 
29588
29588
  <h4 class="subsection">6.497.2 内容</h4>
29589
29589
 
29590
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
29591
-
29592
- <p>浮動小数点型のメンバ変数に対して共用体を使ってビット単位でアクセスする場合の動作はコンパイラ依存なので、移植性を低下させます。
29590
+ <p>浮動小数点型のメンバ変数に対して共用体を使ってビット単位でアクセスする場合の動作はコンパイラ依存なので、移植性を低下させます。
29593
29591
 
29594
29592
  <h4 class="subsection">6.497.3 サンプルコード</h4>
29595
29593
 
29596
- <!-- {未実装} -->
29597
- <pre class="verbatim">/* 追記予定 */
29594
+ <pre class="verbatim">union UNI { /* W0606 */
29595
+ float a;
29596
+ int b;
29597
+ };
29598
29598
  </pre>
29599
29599
 
29600
29600
  <h4 class="subsection">6.497.4 関連メッセージ</h4>
@@ -29603,7 +29603,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
29603
29603
 
29604
29604
  <h4 class="subsection">6.497.5 対応バージョン</h4>
29605
29605
 
29606
- <p>2.0.0 の予定
29606
+ <p>1.4.0
29607
29607
 
29608
29608
  <div class="node">
29609
29609
  <a name="W0607"></a>
@@ -33348,9 +33348,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33348
33348
 
33349
33349
  <h4 class="subsection">6.565.2 内容</h4>
33350
33350
 
33351
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
33352
-
33353
- <p>このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。
33351
+ <p>このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。
33354
33352
 
33355
33353
  <h4 class="subsection">6.565.3 サンプルコード</h4>
33356
33354
 
@@ -33368,7 +33366,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33368
33366
 
33369
33367
  <h4 class="subsection">6.565.5 対応バージョン</h4>
33370
33368
 
33371
- <p>2.0.0 の予定
33369
+ <p>1.4.0
33372
33370
 
33373
33371
  <div class="node">
33374
33372
  <a name="W0688"></a>
@@ -33666,16 +33664,12 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33666
33664
 
33667
33665
  <h4 class="subsection">6.573.2 内容</h4>
33668
33666
 
33669
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
33670
-
33671
- <p><code>assert</code> マクロの定義解消や再定義は、未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
33667
+ <p><code>assert</code> マクロの定義解消や再定義は、未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
33672
33668
 
33673
33669
  <h4 class="subsection">6.573.3 サンプルコード</h4>
33674
33670
 
33675
33671
  <pre class="verbatim">#undef assert /* W0695 */
33676
- void assert(int a)
33677
- {
33678
- }
33672
+ extern void assert(int a);
33679
33673
  </pre>
33680
33674
 
33681
33675
  <h4 class="subsection">6.573.4 関連メッセージ</h4>
@@ -33684,7 +33678,7 @@ void assert(int a)
33684
33678
 
33685
33679
  <h4 class="subsection">6.573.5 対応バージョン</h4>
33686
33680
 
33687
- <p>2.0.0 の予定
33681
+ <p>1.4.0
33688
33682
 
33689
33683
  <div class="node">
33690
33684
  <a name="W0696"></a>
@@ -33796,14 +33790,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33796
33790
 
33797
33791
  <h4 class="subsection">6.576.2 内容</h4>
33798
33792
 
33799
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
33800
-
33801
- <p>式を持たない <code>return</code> 文は不定値を返します。
33793
+ <p>式を持たない <code>return</code> 文は不定値を返します。
33802
33794
 
33803
33795
  <h4 class="subsection">6.576.3 サンプルコード</h4>
33804
33796
 
33805
- <!-- {未実装} -->
33806
- <pre class="verbatim">/* 追記予定 */
33797
+ <pre class="verbatim">int func(void)
33798
+ {
33799
+ return; /* W0698 */
33800
+ }
33807
33801
  </pre>
33808
33802
 
33809
33803
  <h4 class="subsection">6.576.4 関連メッセージ</h4>
@@ -33816,7 +33810,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33816
33810
 
33817
33811
  <h4 class="subsection">6.576.5 対応バージョン</h4>
33818
33812
 
33819
- <p>2.0.0 の予定
33813
+ <p>1.4.0
33820
33814
 
33821
33815
  <div class="node">
33822
33816
  <a name="W0699"></a>
@@ -33837,14 +33831,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33837
33831
 
33838
33832
  <h4 class="subsection">6.577.2 内容</h4>
33839
33833
 
33840
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
33841
-
33842
- <p>式を持たない <code>return</code> 文は不定値を返します。
33834
+ <p>式を持たない <code>return</code> 文は不定値を返します。
33843
33835
 
33844
33836
  <h4 class="subsection">6.577.3 サンプルコード</h4>
33845
33837
 
33846
- <!-- {未実装} -->
33847
- <pre class="verbatim">/* 追記予定 */
33838
+ <pre class="verbatim">extern func(void)
33839
+ {
33840
+ return; /* W0699 */
33841
+ }
33848
33842
  </pre>
33849
33843
 
33850
33844
  <h4 class="subsection">6.577.4 関連メッセージ</h4>
@@ -33857,7 +33851,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
33857
33851
 
33858
33852
  <h4 class="subsection">6.577.5 対応バージョン</h4>
33859
33853
 
33860
- <p>2.0.0 の予定
33854
+ <p>1.4.0
33861
33855
 
33862
33856
  <div class="node">
33863
33857
  <a name="W0700"></a>
@@ -34494,14 +34488,15 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34494
34488
 
34495
34489
  <h4 class="subsection">6.593.2 内容</h4>
34496
34490
 
34497
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34498
-
34499
- <p>上記のような式は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
34491
+ <p>このような式は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。
34500
34492
 
34501
34493
  <h4 class="subsection">6.593.3 サンプルコード</h4>
34502
34494
 
34503
- <!-- {未実装} -->
34504
- <pre class="verbatim">/* 追記予定 */
34495
+ <pre class="verbatim">signed char sc1 = (signed char) 127.5; /* OK */
34496
+ signed char sc2 = (signed char) 128.5; /* W0720 */
34497
+
34498
+ signed char sc3 = (signed char) -128.5; /* OK */
34499
+ signed char sc4 = (signed char) -129.5; /* W0720 */
34505
34500
  </pre>
34506
34501
 
34507
34502
  <h4 class="subsection">6.593.4 関連メッセージ</h4>
@@ -34510,7 +34505,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34510
34505
 
34511
34506
  <h4 class="subsection">6.593.5 対応バージョン</h4>
34512
34507
 
34513
- <p>2.0.0 の予定
34508
+ <p>1.4.0
34514
34509
 
34515
34510
  <div class="node">
34516
34511
  <a name="W0721"></a>
@@ -34531,15 +34526,16 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34531
34526
 
34532
34527
  <h4 class="subsection">6.594.2 内容</h4>
34533
34528
 
34534
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34535
-
34536
- <p>上記のような変換により、ポインタ型変数の一部の情報が欠落したものが整数型に代入されることになります。
34529
+ <p>上記のような変換により、ポインタ型変数の一部の情報が欠落したものが整数型に代入されることになります。
34537
34530
  したがって、代入先の値はもはや正しいアドレスを指していないことになります。
34538
34531
 
34539
34532
  <h4 class="subsection">6.594.3 サンプルコード</h4>
34540
34533
 
34541
- <pre class="verbatim">unsigned char* p;
34542
- unsigned short us = (unsigned short) p; /* W0721 */
34534
+ <pre class="verbatim">void func(int *p)
34535
+ {
34536
+ /* when short is 16 bit long and pointer is 32 bit long */
34537
+ unsigned short us = (unsigned short) p; /* W0721 */
34538
+ }
34543
34539
  </pre>
34544
34540
 
34545
34541
  <h4 class="subsection">6.594.4 関連メッセージ</h4>
@@ -34548,7 +34544,7 @@ unsigned short us = (unsigned short) p; /* W0721 */
34548
34544
 
34549
34545
  <h4 class="subsection">6.594.5 対応バージョン</h4>
34550
34546
 
34551
- <p>2.0.0 の予定
34547
+ <p>1.4.0
34552
34548
 
34553
34549
  <div class="node">
34554
34550
  <a name="W0722"></a>
@@ -34569,17 +34565,19 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34569
34565
 
34570
34566
  <h4 class="subsection">6.595.2 内容</h4>
34571
34567
 
34572
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34573
-
34574
- <p>値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。
34568
+ <p>値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。
34575
34569
  したがって、予期しない動作を引き起こす可能性があります。
34576
34570
 
34577
34571
  <h4 class="subsection">6.595.3 サンプルコード</h4>
34578
34572
 
34579
- <pre class="verbatim">int func(int a) /* int type is 32 bit long */
34573
+ <pre class="verbatim">int func(int a)
34580
34574
  {
34581
- if (a > 0 &amp;&amp; a &lt; 2147483647) {
34582
- return a + 1;
34575
+ /* when int is 32 bit long */
34576
+ if (a &lt; 0) {
34577
+ return a + 1; /* OK */
34578
+ }
34579
+ else if (a &lt; 2147483647) {
34580
+ return a + 1; /* OK */
34583
34581
  }
34584
34582
 
34585
34583
  return a + 1; /* W0722 */
@@ -34594,7 +34592,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34594
34592
 
34595
34593
  <h4 class="subsection">6.595.5 対応バージョン</h4>
34596
34594
 
34597
- <p>2.0.0 の予定
34595
+ <p>1.4.0
34598
34596
 
34599
34597
  <div class="node">
34600
34598
  <a name="W0723"></a>
@@ -34615,15 +34613,23 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34615
34613
 
34616
34614
  <h4 class="subsection">6.596.2 内容</h4>
34617
34615
 
34618
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34619
-
34620
- <p>値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。
34616
+ <p>値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。
34621
34617
  したがって、予期しない動作を引き起こす可能性があります。
34622
34618
 
34623
34619
  <h4 class="subsection">6.596.3 サンプルコード</h4>
34624
34620
 
34625
- <!-- {未実装} -->
34626
- <pre class="verbatim">/* 追記予定 */
34621
+ <pre class="verbatim">int func(int a)
34622
+ {
34623
+ /* when int is 32 bit long */
34624
+ if (a &lt; 0) {
34625
+ return a + 1; /* OK */
34626
+ }
34627
+ else if (a &lt; 2000000000) {
34628
+ return a + 1; /* OK */
34629
+ }
34630
+
34631
+ return a + 1; /* W0723 */
34632
+ }
34627
34633
  </pre>
34628
34634
 
34629
34635
  <h4 class="subsection">6.596.4 関連メッセージ</h4>
@@ -34634,7 +34640,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34634
34640
 
34635
34641
  <h4 class="subsection">6.596.5 対応バージョン</h4>
34636
34642
 
34637
- <p>2.0.0 の予定
34643
+ <p>1.4.0
34638
34644
 
34639
34645
  <div class="node">
34640
34646
  <a name="W0724"></a>
@@ -34688,19 +34694,17 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34688
34694
 
34689
34695
  <h4 class="subsection">6.598.1 メッセージ本文</h4>
34690
34696
 
34691
- <p>修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式 ;' が見つかりました。
34697
+ <p>修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式;' が見つかりました。
34692
34698
 
34693
34699
  <h4 class="subsection">6.598.2 内容</h4>
34694
34700
 
34695
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34696
-
34697
- <p>値を戻してはならない関数であるにも関わらず、明示的な <code>return</code> 文があります。このような記述は誤りです。
34701
+ <p>値を戻してはならない関数であるにも関わらず、明示的な <code>return</code> 文があります。このような記述は誤りです。
34698
34702
 
34699
34703
  <h4 class="subsection">6.598.3 サンプルコード</h4>
34700
34704
 
34701
- <pre class="verbatim">void func(int a)
34705
+ <pre class="verbatim">const void func(int a)
34702
34706
  {
34703
- if(a == 0) {
34707
+ if (a == 0) {
34704
34708
  return 0; /* W0726 */
34705
34709
  }
34706
34710
  }
@@ -34712,7 +34716,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34712
34716
 
34713
34717
  <h4 class="subsection">6.598.5 対応バージョン</h4>
34714
34718
 
34715
- <p>2.0.0 の予定
34719
+ <p>1.4.0
34716
34720
 
34717
34721
  <div class="node">
34718
34722
  <a name="W0727"></a>
@@ -34733,16 +34737,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34733
34737
 
34734
34738
  <h4 class="subsection">6.599.2 内容</h4>
34735
34739
 
34736
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34737
-
34738
- <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34740
+ <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34739
34741
 
34740
34742
  <h4 class="subsection">6.599.3 サンプルコード</h4>
34741
34743
 
34742
34744
  <pre class="verbatim">enum Fruits {
34743
- apple = 1,
34744
- banana,
34745
- orange
34745
+ APPLE = 1,
34746
+ BANANA,
34747
+ ORANGE
34746
34748
  };
34747
34749
 
34748
34750
  enum Fruits fruit = 5; /* W0727 */
@@ -34759,7 +34761,7 @@ enum Fruits fruit = 5; /* W0727 */
34759
34761
 
34760
34762
  <h4 class="subsection">6.599.5 対応バージョン</h4>
34761
34763
 
34762
- <p>2.0.0 の予定
34764
+ <p>1.4.0
34763
34765
 
34764
34766
  <div class="node">
34765
34767
  <a name="W0728"></a>
@@ -34780,14 +34782,19 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34780
34782
 
34781
34783
  <h4 class="subsection">6.600.2 内容</h4>
34782
34784
 
34783
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34784
-
34785
- <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34785
+ <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34786
34786
 
34787
34787
  <h4 class="subsection">6.600.3 サンプルコード</h4>
34788
34788
 
34789
- <!-- {未実装} -->
34790
- <pre class="verbatim">/* 追記予定 */
34789
+ <pre class="verbatim">enum Color { RED, BLUE, GREEN };
34790
+ enum Fruits { APPLE, BANANA, ORANGE };
34791
+
34792
+ extern void func1(enum Color);
34793
+
34794
+ void func2(void)
34795
+ {
34796
+ func1(ORANGE); /* W0728 */
34797
+ }
34791
34798
  </pre>
34792
34799
 
34793
34800
  <h4 class="subsection">6.600.4 関連メッセージ</h4>
@@ -34801,7 +34808,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34801
34808
 
34802
34809
  <h4 class="subsection">6.600.5 対応バージョン</h4>
34803
34810
 
34804
- <p>2.0.0 の予定
34811
+ <p>1.4.0
34805
34812
 
34806
34813
  <div class="node">
34807
34814
  <a name="W0729"></a>
@@ -34822,14 +34829,19 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34822
34829
 
34823
34830
  <h4 class="subsection">6.601.2 内容</h4>
34824
34831
 
34825
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34826
-
34827
- <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34832
+ <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34828
34833
 
34829
34834
  <h4 class="subsection">6.601.3 サンプルコード</h4>
34830
34835
 
34831
- <!-- {未実装} -->
34832
- <pre class="verbatim">/* 追記予定 */
34836
+ <pre class="verbatim">enum Color { RED, BLUE, GREEN };
34837
+ enum Fruits { APPLE, BANANA, ORANGE };
34838
+
34839
+ void func(void)
34840
+ {
34841
+ enum Color c;
34842
+
34843
+ c = ORANGE; /* W0729 */
34844
+ }
34833
34845
  </pre>
34834
34846
 
34835
34847
  <h4 class="subsection">6.601.4 関連メッセージ</h4>
@@ -34843,7 +34855,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34843
34855
 
34844
34856
  <h4 class="subsection">6.601.5 対応バージョン</h4>
34845
34857
 
34846
- <p>2.0.0 の予定
34858
+ <p>1.4.0
34847
34859
 
34848
34860
  <div class="node">
34849
34861
  <a name="W0730"></a>
@@ -34864,14 +34876,17 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34864
34876
 
34865
34877
  <h4 class="subsection">6.602.2 内容</h4>
34866
34878
 
34867
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34868
-
34869
- <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34879
+ <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34870
34880
 
34871
34881
  <h4 class="subsection">6.602.3 サンプルコード</h4>
34872
34882
 
34873
- <!-- {未実装} -->
34874
- <pre class="verbatim">/* 追記予定 */
34883
+ <pre class="verbatim">enum Color { RED, BLUE, GREEN };
34884
+ enum Fruits { APPLE, BANANA, ORANGE };
34885
+
34886
+ enum Color func(void)
34887
+ {
34888
+ return ORANGE; /* W0730 */
34889
+ }
34875
34890
  </pre>
34876
34891
 
34877
34892
  <h4 class="subsection">6.602.4 関連メッセージ</h4>
@@ -34885,7 +34900,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34885
34900
 
34886
34901
  <h4 class="subsection">6.602.5 対応バージョン</h4>
34887
34902
 
34888
- <p>2.0.0 の予定
34903
+ <p>1.4.0
34889
34904
 
34890
34905
  <div class="node">
34891
34906
  <a name="W0731"></a>
@@ -34906,14 +34921,24 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34906
34921
 
34907
34922
  <h4 class="subsection">6.603.2 内容</h4>
34908
34923
 
34909
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
34910
-
34911
- <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34924
+ <p>このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。
34912
34925
 
34913
34926
  <h4 class="subsection">6.603.3 サンプルコード</h4>
34914
34927
 
34915
- <!-- {未実装} -->
34916
- <pre class="verbatim">/* 追記予定 */
34928
+ <pre class="verbatim">enum Color { RED, BLUE, GREEN };
34929
+ enum Fruits { APPLE, BANANA, ORANGE, GRAPE };
34930
+
34931
+ int func(enum Color c)
34932
+ {
34933
+ switch (c) {
34934
+ case RED:
34935
+ return 1;
34936
+ case GRAPE: /* W0731 */
34937
+ return 2;
34938
+ }
34939
+
34940
+ return 0;
34941
+ }
34917
34942
  </pre>
34918
34943
 
34919
34944
  <h4 class="subsection">6.603.4 関連メッセージ</h4>
@@ -34927,7 +34952,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
34927
34952
 
34928
34953
  <h4 class="subsection">6.603.5 対応バージョン</h4>
34929
34954
 
34930
- <p>2.0.0 の予定
34955
+ <p>1.4.0
34931
34956
 
34932
34957
  <div class="node">
34933
34958
  <a name="W0732"></a>
@@ -35156,14 +35181,11 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35156
35181
 
35157
35182
  <h4 class="subsection">6.609.2 内容</h4>
35158
35183
 
35159
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
35160
-
35161
- <p>定義していない列挙体のタグを使用することは言語制約違反になります。したがって、移植性を低下させます。
35184
+ <p>定義していない列挙体のタグを使用することは言語制約違反になります。したがって、移植性を低下させます。
35162
35185
 
35163
35186
  <h4 class="subsection">6.609.3 サンプルコード</h4>
35164
35187
 
35165
- <!-- {未実装} -->
35166
- <pre class="verbatim">/* 追記予定 */
35188
+ <pre class="verbatim">extern enum Foo foo; /* W0737 */
35167
35189
  </pre>
35168
35190
 
35169
35191
  <h4 class="subsection">6.609.4 関連メッセージ</h4>
@@ -35172,7 +35194,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35172
35194
 
35173
35195
  <h4 class="subsection">6.609.5 対応バージョン</h4>
35174
35196
 
35175
- <p>2.0.0 の予定
35197
+ <p>1.4.0
35176
35198
 
35177
35199
  <div class="node">
35178
35200
  <a name="W0738"></a>
@@ -35193,14 +35215,18 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35193
35215
 
35194
35216
  <h4 class="subsection">6.610.2 内容</h4>
35195
35217
 
35196
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
35197
-
35198
- <p>値が型で表現可能な範囲を超えてしまう(オーバーフローする)ことで、代入先には元々の定数の値がそのまま入らなくなります。
35218
+ <p>値が型で表現可能な範囲を超えてしまう(オーバーフローする)ことで、代入先には元々の定数の値がそのまま入らなくなります。
35199
35219
  つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
35200
35220
 
35201
35221
  <h4 class="subsection">6.610.3 サンプルコード</h4>
35202
35222
 
35203
- <pre class="verbatim">unsigned char uc = 500; /* W0738 */
35223
+ <pre class="verbatim">/* when char is 8 bit long */
35224
+ const unsigned char uc1 = 255; /* OK */
35225
+ const unsigned char uc2 = 256; /* W0738 */
35226
+
35227
+ /* when int is 32 bit long */
35228
+ const unsigned int ui1 = 4294967295; /* OK */
35229
+ const unsigned int ui2 = 4294967296; /* W0738 */
35204
35230
  </pre>
35205
35231
 
35206
35232
  <h4 class="subsection">6.610.4 関連メッセージ</h4>
@@ -35209,7 +35235,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35209
35235
 
35210
35236
  <h4 class="subsection">6.610.5 対応バージョン</h4>
35211
35237
 
35212
- <p>2.0.0 の予定
35238
+ <p>1.4.0
35213
35239
 
35214
35240
  <div class="node">
35215
35241
  <a name="W0739"></a>
@@ -35230,14 +35256,13 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35230
35256
 
35231
35257
  <h4 class="subsection">6.611.2 内容</h4>
35232
35258
 
35233
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
35234
-
35235
- <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35259
+ <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35236
35260
  つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
35237
35261
 
35238
35262
  <h4 class="subsection">6.611.3 サンプルコード</h4>
35239
35263
 
35240
- <pre class="verbatim">unsigned int ui = 5U - 10U; /* W0739 */
35264
+ <pre class="verbatim">const unsigned int ui1 = 3U - 3U; /* OK */
35265
+ const unsigned int ui2 = 3U - 5U; /* W0739 */
35241
35266
  </pre>
35242
35267
 
35243
35268
  <h4 class="subsection">6.611.4 関連メッセージ</h4>
@@ -35249,7 +35274,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35249
35274
 
35250
35275
  <h4 class="subsection">6.611.5 対応バージョン</h4>
35251
35276
 
35252
- <p>2.0.0 の予定
35277
+ <p>1.4.0
35253
35278
 
35254
35279
  <div class="node">
35255
35280
  <a name="W0740"></a>
@@ -35270,16 +35295,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35270
35295
 
35271
35296
  <h4 class="subsection">6.612.2 内容</h4>
35272
35297
 
35273
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
35274
-
35275
- <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35298
+ <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35276
35299
  つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
35277
35300
 
35278
35301
  <h4 class="subsection">6.612.3 サンプルコード</h4>
35279
35302
 
35280
- <pre class="verbatim">#define MACRO (255)
35281
-
35282
- unsigned char uc = MACRO + 10; /* W0740 */
35303
+ <pre class="verbatim">/* when int is 32 bit long */
35304
+ const unsigned int ui1 = 4294967294U + 1U; /* OK */
35305
+ const unsigned int ui2 = 4294967295U + 1U; /* W0740 */
35283
35306
  </pre>
35284
35307
 
35285
35308
  <h4 class="subsection">6.612.4 関連メッセージ</h4>
@@ -35291,7 +35314,7 @@ unsigned char uc = MACRO + 10; /* W0740 */
35291
35314
 
35292
35315
  <h4 class="subsection">6.612.5 対応バージョン</h4>
35293
35316
 
35294
- <p>2.0.0 の予定
35317
+ <p>1.4.0
35295
35318
 
35296
35319
  <div class="node">
35297
35320
  <a name="W0741"></a>
@@ -35312,15 +35335,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35312
35335
 
35313
35336
  <h4 class="subsection">6.613.2 内容</h4>
35314
35337
 
35315
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
35316
-
35317
- <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35338
+ <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35318
35339
  つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
35319
35340
 
35320
35341
  <h4 class="subsection">6.613.3 サンプルコード</h4>
35321
35342
 
35322
- <!-- {未実装} -->
35323
- <pre class="verbatim">/* 追記予定 */
35343
+ <pre class="verbatim">/* when int is 32 bit long */
35344
+ const unsigned int ui1 = 2000000000U * 2U; /* OK */
35345
+ const unsigned int ui2 = 3000000000U * 2U; /* W0741 */
35324
35346
  </pre>
35325
35347
 
35326
35348
  <h4 class="subsection">6.613.4 関連メッセージ</h4>
@@ -35332,7 +35354,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35332
35354
 
35333
35355
  <h4 class="subsection">6.613.5 対応バージョン</h4>
35334
35356
 
35335
- <p>2.0.0 の予定
35357
+ <p>1.4.0
35336
35358
 
35337
35359
  <div class="node">
35338
35360
  <a name="W0742"></a>
@@ -35391,19 +35413,19 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
35391
35413
 
35392
35414
  <h4 class="subsection">6.615.2 内容</h4>
35393
35415
 
35394
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
35395
-
35396
- <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35416
+ <p>値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。
35397
35417
  つまり、プログラマの意図しない値が代入されることになり、不具合につながります。
35398
35418
  また、このような処理は、動作が処理系定義になります。したがって、移植性を低下させます。
35399
35419
 
35400
35420
  <h4 class="subsection">6.615.3 サンプルコード</h4>
35401
35421
 
35402
- <pre class="verbatim">#define MACRO (255)
35403
-
35404
- signed char sc;
35422
+ <pre class="verbatim">/* when char is 8 bit long */
35423
+ const signed char sc1 = 127; /* OK */
35424
+ const signed char sc2 = 128; /* W0743 */
35405
35425
 
35406
- sc = MACRO + 150; /* W0743 */
35426
+ /* when int is 32 bit long */
35427
+ const int si1 = 2147483647; /* OK */
35428
+ const int si2 = 2147483648; /* W0743 */
35407
35429
  </pre>
35408
35430
 
35409
35431
  <h4 class="subsection">6.615.4 関連メッセージ</h4>
@@ -35412,7 +35434,7 @@ sc = MACRO + 150; /* W0743 */
35412
35434
 
35413
35435
  <h4 class="subsection">6.615.5 対応バージョン</h4>
35414
35436
 
35415
- <p>2.0.0 の予定
35437
+ <p>1.4.0
35416
35438
 
35417
35439
  <div class="node">
35418
35440
  <a name="W0744"></a>
@@ -38038,14 +38060,19 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
38038
38060
 
38039
38061
  <h4 class="subsection">6.669.2 内容</h4>
38040
38062
 
38041
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
38042
-
38043
- <p>名前付きのメンバを一つも持たない構造体または共用体を使用したときの動作は未定義です。
38063
+ <p>名前付きのメンバを一つも持たない構造体または共用体を使用したときの動作は未定義です。
38044
38064
  従って、予期しない動作を引き起こす可能性があります。
38045
38065
 
38046
38066
  <h4 class="subsection">6.669.3 サンプルコード</h4>
38047
38067
 
38048
- <pre class="verbatim">struct ST { /* W0801 */
38068
+ <pre class="verbatim">struct foo { /* W0801 */
38069
+ };
38070
+
38071
+ struct bar { /* W0801 */
38072
+ int;
38073
+ int :1;
38074
+ long;
38075
+ double;
38049
38076
  };
38050
38077
  </pre>
38051
38078
 
@@ -38055,7 +38082,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
38055
38082
 
38056
38083
  <h4 class="subsection">6.669.5 対応バージョン</h4>
38057
38084
 
38058
- <p>2.0.0 の予定
38085
+ <p>1.4.0
38059
38086
 
38060
38087
  <div class="node">
38061
38088
  <a name="W0802"></a>
@@ -38228,15 +38255,12 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
38228
38255
 
38229
38256
  <h4 class="subsection">6.674.2 内容</h4>
38230
38257
 
38231
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
38232
-
38233
- <p>ISO C90 で規定されている予約語を定義、再定義、定義解消することは未定義の動作になります。
38258
+ <p>ISO C90 で規定されている予約語を定義、再定義、定義解消することは未定義の動作になります。
38234
38259
  したがって、予期しない動作を引き起こす可能性あります。
38235
38260
 
38236
38261
  <h4 class="subsection">6.674.3 サンプルコード</h4>
38237
38262
 
38238
- <!-- {未実装} -->
38239
- <pre class="verbatim">/* 追記予定 */
38263
+ <pre class="verbatim">#define defined !defined /* W0806 */
38240
38264
  </pre>
38241
38265
 
38242
38266
  <h4 class="subsection">6.674.4 関連メッセージ</h4>
@@ -38248,7 +38272,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
38248
38272
 
38249
38273
  <h4 class="subsection">6.674.5 対応バージョン</h4>
38250
38274
 
38251
- <p>2.0.0 の予定
38275
+ <p>1.4.0
38252
38276
 
38253
38277
  <div class="node">
38254
38278
  <a name="W0807"></a>
@@ -38709,22 +38733,26 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
38709
38733
 
38710
38734
  <p>long long 型を使っています。
38711
38735
 
38736
+ <h4 class="subsection">6.686.2 内容</h4>
38737
+
38738
+ <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
38739
+
38712
38740
  <p><code>long long</code> 型は、言語拡張に該当するため、移植性を低下させます。
38713
38741
 
38714
- <h4 class="subsection">6.686.2 サンプルコード</h4>
38742
+ <h4 class="subsection">6.686.3 サンプルコード</h4>
38715
38743
 
38716
38744
  <pre class="verbatim">long long a = 0; /* W0834 */
38717
38745
  </pre>
38718
38746
 
38719
- <h4 class="subsection">6.686.3 関連メッセージ</h4>
38747
+ <h4 class="subsection">6.686.4 関連メッセージ</h4>
38720
38748
 
38721
38749
  <ul>
38722
38750
  <li><a href="#W0833">W0833</a> 接尾語 LL を使っています。
38723
38751
  </ul>
38724
38752
 
38725
- <h4 class="subsection">6.686.4 対応バージョン</h4>
38753
+ <h4 class="subsection">6.686.5 対応バージョン</h4>
38726
38754
 
38727
- <p>1.0.0
38755
+ <p>2.0.0 の予定
38728
38756
 
38729
38757
  <div class="node">
38730
38758
  <a name="W0835"></a>
@@ -39198,15 +39226,25 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
39198
39226
 
39199
39227
  <h4 class="subsection">6.699.2 内容</h4>
39200
39228
 
39201
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
39202
-
39203
- <p>関数の戻り値の型が、<code>volatile</code> 型の場合の動作は処理系定義です。
39229
+ <p>関数の戻り値の型が、<code>volatile</code> 型の場合の動作は処理系定義です。
39204
39230
  また、<code>const</code> 型の場合は未定義です。
39205
39231
 
39206
39232
  <h4 class="subsection">6.699.3 サンプルコード</h4>
39207
39233
 
39208
- <!-- {未実装} -->
39209
- <pre class="verbatim">/* 追記予定 */
39234
+ <pre class="verbatim">extern const int func1(int); /* W1033 */
39235
+
39236
+ const int func2(int i) /* W1033 */
39237
+ {
39238
+ return i + 1;
39239
+ }
39240
+
39241
+ const int *func3(int i) /* OK */
39242
+ {
39243
+ static int j;
39244
+
39245
+ j = i;
39246
+ return &amp;j;
39247
+ }
39210
39248
  </pre>
39211
39249
 
39212
39250
  <h4 class="subsection">6.699.4 関連メッセージ</h4>
@@ -39215,7 +39253,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
39215
39253
 
39216
39254
  <h4 class="subsection">6.699.5 対応バージョン</h4>
39217
39255
 
39218
- <p>2.0.0 の予定
39256
+ <p>1.4.0
39219
39257
 
39220
39258
  <div class="node">
39221
39259
  <a name="W1034"></a>
@@ -40526,14 +40564,23 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
40526
40564
 
40527
40565
  <h4 class="subsection">6.729.2 内容</h4>
40528
40566
 
40529
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
40530
-
40531
- <p>非列挙型から列挙型への変換が生じています。
40567
+ <p>非列挙型から列挙型への変換が生じています。
40532
40568
 
40533
40569
  <h4 class="subsection">6.729.3 サンプルコード</h4>
40534
40570
 
40535
- <!-- {未実装} -->
40536
- <pre class="verbatim">/* 追記予定 */
40571
+ <pre class="verbatim">enum Color { RED, BLUE, GREEN };
40572
+
40573
+ int func(enum Color c)
40574
+ {
40575
+ switch (c) {
40576
+ case RED: /* OK */
40577
+ return 1;
40578
+ case 1: /* W1064 */
40579
+ return 2;
40580
+ }
40581
+
40582
+ return 0;
40583
+ }
40537
40584
  </pre>
40538
40585
 
40539
40586
  <h4 class="subsection">6.729.4 関連メッセージ</h4>
@@ -40555,7 +40602,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
40555
40602
 
40556
40603
  <h4 class="subsection">6.729.5 対応バージョン</h4>
40557
40604
 
40558
- <p>2.0.0 の予定
40605
+ <p>1.4.0
40559
40606
 
40560
40607
  <div class="node">
40561
40608
  <a name="W1065"></a>
@@ -40576,14 +40623,24 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
40576
40623
 
40577
40624
  <h4 class="subsection">6.730.2 内容</h4>
40578
40625
 
40579
- <p><b>このメッセージは AdLint 2.0.0 で出力する予定です。</b>
40580
-
40581
- <p>列挙型から異なる列挙型への変換が生じています。
40626
+ <p>列挙型から異なる列挙型への変換が生じています。
40582
40627
 
40583
40628
  <h4 class="subsection">6.730.3 サンプルコード</h4>
40584
40629
 
40585
- <!-- {未実装} -->
40586
- <pre class="verbatim">/* 追記予定 */
40630
+ <pre class="verbatim">enum Color { RED, BLUE, GREEN };
40631
+ enum Fruits { APPLE, BANANA, ORANGE, GRAPE };
40632
+
40633
+ int func(enum Color c)
40634
+ {
40635
+ switch (c) {
40636
+ case RED: /* OK */
40637
+ return 1;
40638
+ case ORANGE: /* W1065 */
40639
+ return 2;
40640
+ }
40641
+
40642
+ return 0;
40643
+ }
40587
40644
  </pre>
40588
40645
 
40589
40646
  <h4 class="subsection">6.730.4 関連メッセージ</h4>
@@ -40605,7 +40662,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#Messages">Messages</a>
40605
40662
 
40606
40663
  <h4 class="subsection">6.730.5 対応バージョン</h4>
40607
40664
 
40608
- <p>2.0.0 の予定
40665
+ <p>1.4.0
40609
40666
 
40610
40667
  <div class="node">
40611
40668
  <a name="W9001"></a>