AdLint 3.2.0 利用者ガイド


Next: , Up: (dir)

導入

AdLint とは

AdLint は、オープンソースのソースコード静的解析ツールです。

AdLint は、ソースコード中の安全性や移植性に欠ける部分について警告メッセージを出 力し、また、同時にさまざまな品質メトリクスを測定することができます。

活用事例の一部は、付録のスクリーンショットでご確認いただけま す。

AdLint は、(現時点では) ANSI C89 / ISO C90 / 一部 ISO C99 規格に準拠した C 言語 のソースコードを解析することができます。

AdLint は Ruby で実装されているため、Windows、 Mac OS X、GNU/Linux、FreeBSD など Ruby がサポートする全てのプラットフォームで利 用することができます。

ライセンス

Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.

AdLint is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

AdLint is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with AdLint. If not, see <http://www.gnu.org/licenses/>.

目次


Next: , Previous: Top, Up: Top

1 インストール


Next: , Up: Installation

1.1 動作要件

AdLint の使用には、Ruby バージョン 1.9.3-p0 以降のインストールが必要です。

また、adlintize コマンドによって作成する解析 自動化 GNUmakefile を使用するために、GNU Make バージョン 3 以降のインス トールをお勧めします。


Next: , Previous: Requirements, Up: Installation

1.2 ハードウェア環境

推奨ハードウェア環境は、解析対象ソフトウェアの規模により一概には規定できません が、参考情報として AdLint のテスト環境と実際に計測した解析時間を紹介します。

1.2.1 MS Windows

MS Windows XP (SP3) 上でのテストは Intel Core i5 3.33GHz (660)、物理メモリ 2 GB の環境で行っています。

この環境で Ruby 1.9.3-p0 (ビルド対象の総物理行数 62 万行) を解析した場合、下記 の解析時間を要しました。

1.2.2 GNU/Linux

Fedora 14 上でのテストは Intel Core2 Duo 2.20GHz (E4500)、物理メモリ 3.4 GB の 環境で行っています。

この環境で Ruby 1.9.3-p0 (ビルド対象の総物理行数 62 万行) を解析した場合、下記 の解析時間を要しました。


Next: , Previous: Hardware Environment, Up: Installation

1.3 MS Windows 環境へのインストール手順

1.3.1 Ruby のインストール

RubyInstaller for Windows の ダウンロードページから 1.9.3-p0 以 降のバージョンの RubyInstaller を入手します。

RubyInstaller を実行し、インストーラの指示に従い Ruby をインストールします。

1.3.2 DEVELOPMENT KIT (DevKit) のインストール

GNU Make を含む DEVELOPMENT KIT (DevKit) のインストールを推奨します。

RubyInstaller for Windows で配布されている DEVELOPMENT KIT (DevKit) をダウンロ ードページから入手します。

DevKit-*.exe を実行すると、DEVELOPMENT KIT が指定したディレクトリに展開 されます。

1.3.3 PATH 環境変数の設定

Ruby のインストール でインストールした Ruby ディレ クトリ中の bin、DEVELOPMENT KIT (DevKit) のインスト ール で展開した DevKit ディレクトリ中の bin、mingw\bin を PATH 環境変数に追加してください。

1.3.4 AdLint のインストール

コマンドプロンプトを起動し、下記のコマンドにより AdLint の最新バージョンをダウ ンロードしインストールします。

> gem install adlint --no-rdoc --no-ri

HTTP プロキシを使用する場合は、下記のように gem コマンドに --http-proxy http://ユーザ:パスワード@プロキシホスト:ポート番号 を指 定します。

> gem install adlint --no-rdoc --no-ri --http-proxy http://user:passwd@proxy:3128


Next: , Previous: Install On Windows, Up: Installation

1.4 Unix 環境へのインストール手順

Ruby インストールガイド に従い、Ruby インタプリタをインストールします。

その後、下記のコマンドにより AdLint の最新バージョンをダウンロードしインストー ルします。

% gem install adlint
または、
% sudo gem install adlint

HTTP プロキシを使用する場合は、gem コマンドに --http-proxy http://ユーザ:パスワード@プロキシホスト:ポート番号 を指定します。


Previous: Install On Unix, Up: Installation

1.5 動作テストと AdLint の試用

AdLint には小さなサンプルの C 言語プロジェクトが付属しています。 下記の手順で、intro_demo プロジェクトを用いて AdLint の動作テストを行っ てください。

intro_demo プロジェクトをユーザのワークスペースへコピーします。

% cp -r `adlint --prefix`/share/demo/intro_demo .

adlintize コマンドにより、静的解析のための設 定ファイルを生成します。

% cd intro_demo
% adlintize

下記のファイルが出力されます。

GNU Make バージョン 3 以降がインストール済みの場合、下記のコマンドにより解析す ることができます。

% make verbose-all
adlint --verbose -t adlint_traits.yml -o . intro_demo.c
                  intro_demo.c [fin] |============================| 0.401s
                    intro_demo [fin] |============================| 0.029s
  1.125s user, 0.765s system, 00:00:01.89 total

GNU Make をインストールしていない場合は、下記のように直接 adlint コマンドを使用してください。

% adlint -v -t adlint_traits.yml -l adlint_files.txt
                  intro_demo.c [fin] |============================| 0.401s
                    intro_demo [fin] |============================| 0.029s
  1.125s user, 0.765s system, 00:00:01.89 total

解析処理が正常に終了すると、下記のファイルが出力されます。

intro_demo.c.msg.csv の内容は、「いくつかの文に制御が到達しないこと」と 「いくつかの文でゼロによる除算が発生すること」などを示しているはずです。


Next: , Previous: Installation, Up: Top

2 サンプルセッション


Next: , Up: Sample Session

2.1 GNU Screen の解析

2.1.1 プロジェクトの準備

ftp://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz をダウンロードし、適当 なディレクトリに展開します。

% wget ftp://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz
Length: 840602 (821K) [application/x-tar]
Saving to: `screen-4.0.3.tar.gz'

100%[======================================>] 840,602     --.-K/s   in 0.1s

2011-09-28 11:41:55 (6.18 MB/s) - `screen-4.0.3.tar.gz' saved [840602/840602]

% tar xzf screen-4.0.3.tar.gz
% ls -F
screen-4.0.3/   screen-4.0.3.tar.gz

2.1.2 プロジェクトの調査

GNU Screen を実際にビルドすることで、解析を実行する環境でどのようにビルドされる かを確認します。

% cd screen-4.0.3
% ./configure
this is screen version 4.0.3
checking for prefix by checking for screen... /usr/bin/screen
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
...snip...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating doc/Makefile
config.status: creating config.h
config.status: executing default commands

Now please check the pathnames in the Makefile and in the user
configuration section in config.h.
Then type 'make' to make screen. Good luck.

% make 2>&1 | tee make.log
CPP="gcc -E " srcdir=. sh ./osdef.sh
AWK=gawk CC="gcc -g -O2" srcdir=. sh ./comm.sh
AWK=gawk srcdir=. sh ./term.sh
gcc -c -I. -I.    -g -O2 screen.c
gcc -c -I. -I.    -g -O2 ansi.c
gcc -c -I. -I.    -g -O2 fileio.c
gcc -c -I. -I.    -g -O2 mark.c
gcc -c -I. -I.    -g -O2 misc.c
gcc -c -I. -I.    -g -O2 resize.c
gcc -c -I. -I.    -g -O2 socket.c
gcc -c -I. -I.    -g -O2 search.c
sh ./tty.sh tty.c
gcc -c -I. -I.    -g -O2 tty.c
gcc -c -I. -I.    -g -O2 term.c
gcc -c -I. -I.    -g -O2 window.c
gcc -c -I. -I.    -g -O2 utmp.c
gcc -c -I. -I.    -g -O2 loadav.c
gcc -c -I. -I.    -g -O2 putenv.c
gcc -c -I. -I.    -g -O2 help.c
gcc -c -I. -I.    -g -O2 termcap.c
gcc -c -I. -I.    -g -O2 input.c
gcc -c -I. -I.    -g -O2 attacher.c
gcc -c -I. -I.    -g -O2 pty.c
gcc -c -I. -I.    -g -O2 process.c
gcc -c -I. -I.    -g -O2 display.c
gcc -c -I. -I.    -g -O2 comm.c
gcc -c -I. -I.    -g -O2 kmapdef.c
gcc -c -I. -I.    -g -O2 acls.c
gcc -c -I. -I.    -g -O2 braille.c
gcc -c -I. -I.    -g -O2 braille_tsi.c
gcc -c -I. -I.    -g -O2 logfile.c
gcc -c -I. -I.    -g -O2 layer.c
gcc -c -I. -I.    -g -O2 sched.c
gcc -c -I. -I.    -g -O2 teln.c
gcc -c -I. -I.    -g -O2 nethack.c
gcc -c -I. -I.    -g -O2 encoding.c
gcc  -o screen screen.o ansi.o fileio.o mark.o misc.o resize.o socket.o
search.o tty.o term.o window.o utmp.o loadav.o putenv.o help.o termcap.o
input.o attacher.o pty.o process.o display.o comm.o kmapdef.o acls.o braille.o
braille_tsi.o logfile.o layer.o sched.o teln.o nethack.o encoding.o -lcurses
-lcrypt

2.1.3 静的解析の準備

adlintize コマンドを使い、静的解析に必要なフ ァイルの雛形を作成し、対象プロジェクトに応じて設定ファイルを編集します。

プロジェクトのビルドに使用したコンピュータ環境、コンパイラ環境を調査します。

% uname -mo
i686 GNU/Linux
% gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

adlintize コマンドがサポートするプリセットの ビルド環境を表示し、プロジェクトのビルド環境に近いものを選択します。 このセッションでは i686 アーキテクチャ上の GNU/Linux で GCC 4.5.1 を使用してい るので、i686-linux-gcc_4.5.1 を選択することになります。

% adlintize -L
i686-linux-gcc_4.5.1
i686-cygwin-gcc_4.3.4
i686-mingw-gcc_4.5.2
x86_64-ubuntu_12.04-gcc_4.6.3

adlintize コマンドで静的解析に必要なファイル の雛形を生成します。

% adlintize -e i686-linux-gcc_4.5.1 -o adlint
% cd adlint
% ls
GNUmakefile     adlint_all.sh   adlint_files.txt  adlint_traits.yml
adlint_all.bat  adlint_cinit.h  adlint_pinit.h

プロジェクトの調査で作成した make.log ファイルと adlintize コマンドが生成した GNUmakefile 中の SOURCES 値を比較して、静的解析の対象ソースファイ ルの過不足を修正します。

% cp GNUmakefile GNUmakefile.orig
% vi GNUmakefile
% diff -u GNUmakefile.orig GNUmakefile
--- GNUmakefile.orig    2011-09-28 13:36:24.328078206 +0900
+++ GNUmakefile 2011-09-28 13:36:37.573902006 +0900
@@ -29,8 +29,6 @@
   putenv.c \
   fileio.c \
   kmapdef.c \
-  terminfo/checktc.c \
-  terminfo/tetris.c \
   search.c \
   input.c \
   ansi.c \

次に、プロジェクトの調査で作成した make.log ファイル 中でコンパイラに指定されたオプションから、プロジェクト固有のインクルードパスを 洗い出し adlint_traits.yml ファイルに追記します。

% cp adlint_traits.yml adlint_traits.yml.orig
% vi adlint_traits.yml
% diff -u adlint_traits.yml.orig adlint_traits.yml
--- adlint_traits.yml.orig      2011-09-28 13:40:10.748222288 +0900
+++ adlint_traits.yml   2011-09-28 13:40:24.105054386 +0900
@@ -25,6 +25,7 @@
   #     - "../include/bar"
   #     - "/opt/baz/include"
   include_path:
+    - ".."

   # Pathname of the project specific initial header file.
   # This header file is automatically included above the first line of the

2.1.4 静的解析の実行

静的解析の準備で作成した GNUmakefile を使い、静的 解析を実行します。

% make --version
GNU Make 3.82
Built for i386-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

% make verbose-all
adlint --verbose -t adlint_traits.yml -o . ../braille.c ../acls.c ../putenv.c
../fileio.c ../kmapdef.c ../search.c ../input.c ../ansi.c ../pty.c ../layer.c
../termcap.c ../loadav.c ../comm.c ../screen.c ../term.c ../teln.c ../socket.c
../encoding.c ../utmp.c ../logfile.c ../display.c ../misc.c ../attacher.c
../help.c ../tty.c ../nethack.c ../braille_tsi.c ../sched.c ../process.c
../window.c ../mark.c ../resize.c
                  ../braille.c [fin] |============================| 7.999s
                     ../acls.c [fin] |============================| 12.152s
                   ../putenv.c [fin] |============================| 0.203s
                   ../fileio.c [fin] |============================| 13.013s
...snip...
                   ../window.c [fin] |============================| 22.388s
                     ../mark.c [fin] |============================| 14.827s
                   ../resize.c [fin] |============================| 18.964s
                  screen-4.0.3 [fin] |============================| 58.346s
  771.510s user, 2.370s system, 00:12:53.87 total

% ls *.{i,msg.csv,met.csv,log}
acls.c.log             kmapdef.c.log      sched.c.log
acls.c.met.csv         kmapdef.c.met.csv  sched.c.met.csv
acls.c.msg.csv         kmapdef.c.msg.csv  sched.c.msg.csv
acls.i                 kmapdef.i          sched.i
ansi.c.log             layer.c.log        screen-4.0.3.log
ansi.c.met.csv         layer.c.met.csv    screen-4.0.3.met.csv
ansi.c.msg.csv         layer.c.msg.csv    screen-4.0.3.msg.csv
...snip...
input.c.log            resize.c.log       window.c.met.csv
input.c.met.csv        resize.c.met.csv   window.c.msg.csv
input.c.msg.csv        resize.c.msg.csv   window.i
input.i                resize.i


Previous: Analyzing Screen, Up: Sample Session

2.2 distmake を用いた高速な分散並列解析

追記予定。


Next: , Previous: Sample Session, Up: Top

3 コマンド仕様


Next: , Up: Command

3.1 adlintize コマンド

3.1.1 機能

AdLint による静的解析に必要な下記ファイルの雛形を作成します。

GNUmakefile 中の SOURCES 変数には、adlintize コマンドを 実行したディレクトリ配下にある全ての *.c ファイルが設定されます。

3.1.2 使用方法

解析対象プロジェクトのルートディレクトリで、下記のように adlintize コ マンドを実行すると、adlint ディレクトリ中に静的解析に必要なファイルを作 成します。

% cd project-root
% adlintize -o adlint
% ls adlint
GNUmakefile     adlint_all.sh   adlint_files.txt  adlint_traits.yml
adlint_all.bat  adlint_cinit.h  adlint_pinit.h

adlintize コマンドには、プリセットのビルド環境がいくつか用意されてい ます。 プリセットのビルド環境を指定することで、設定ファイルの雛形により多くの情報を自 動生成することができます。

用意されているプリセットのビルド環境は、下記のコマンドにより一覧を確認すること ができます。

% adlintize -L
i686-linux-gcc_4.5.1
i686-cygwin-gcc_4.3.4
i686-mingw-gcc_4.5.2
x86_64-ubuntu_12.04-gcc_4.6.3

プリセットのビルド環境は、-e オプションで指定します。

% cd project-root
% adlintize -e i686-linux-gcc_4.5.1 -o adlint
% ls adlint
GNUmakefile     adlint_all.sh   adlint_files.txt  adlint_traits.yml
adlint_all.bat  adlint_cinit.h  adlint_pinit.h

3.1.3 ヘルプメッセージ

Usage: adlintize [options] [project-name]
Options:
  -t FILE, --traits FILE         Write traits to FILE
                                 If omitted, `adlint_traits.yml' will be used
  -p FILE, --pinit-header FILE   Write project initial header to FILE
                                 If omitted, `adlint_pinit.h' will be used
  -c FILE, --cinit-header FILE   Write compiler initial header to FILE
                                 If omitted, `adlint_cinit.h' will be used
  -l FILE, --list-file FILE      Write list file to FILE
                                 If omitted, `adlint_files.txt' will be used
  -m FILE, --makefile FILE       Write analysis procedure GNUmakefile to FILE
                                 If omitted, `GNUmakefile' will be used
  -s FILE, --sh-script FILE      Write analysis procedure sh script to FILE
                                 If omitted, `adlint_all.sh' will be used
  -b FILE, --bat-file FILE       Write analysis procedure bat file to FILE
                                 If omitted, `adlint_all.bat' will be used
  -o DIR, --output-dir DIR       Set output directory
                                 If omitted, `.' will be used
  -e ENV, --environment ENV      Assume ENV as target build environment
  -L, --list-environment         List all preset build environments
  -f, --force                    Force to overwrite existing files
      --version                  Display version information
      --copyright                Display copyright information
      --prefix                   Display prefix directory of AdLint
  -h, --help                     Display this message


Next: , Previous: AdLintize Command, Up: Command

3.2 adlint コマンド

3.2.1 機能

一括でシングルモジュール解析 (コンパイルフェーズに対応する解析) とクロスモジュ ール解析 (リンクフェーズに対応する解析) を実行します。

解析対象のソースファイルをコマンドラインで指定する方法と、リストファイルにより 指定する方法をサポートします。

動作内容は、解析対象のソースファイルを全て指定して adlint_sma コマンドによりシングルモジュール解析を実行し、 adlint_cma コマンドによりクロスモジュール解 析を実行する場合と同等です。

シングルモジュール解析結果として、ソースファイル毎に下記のファイルを作成します 。

クロスモジュール解析結果として、下記のファイルを作成します。

3.2.2 使用方法

adlintize コマンドにより設定ファイルの雛形を 作成したディレクトリで、下記のように adlint コマンドを起動するとシン グルモジュール解析とクロスモジュール解析を一括で実行可能です。

% cd project-root
% adlintize -o adlint
% cd adlint
% adlint -v -t adlint_traits.yml -o . -p 1 -l adlint_files.txt
               ../intro_demo.c [fin] |============================| 0.134s
                    intro_demo [fin] |============================| 0.012s
  0.718s user, 0.500s system, 00:00:01.21 total

テキストエディタや統合開発環境などと連携する場合、下記のように -v,--verbose オプションを指定しないことで、進捗表示を行わずメッセージ を stderr に出力することができます。

% adlint -t adlint_traits.yml -o . -p 1 -l adlint_files.txt
../intro_demo.c:6:9:warning:c_builtin:W0492:UNC:X99:同じ識別子名 `i' が構造体/共用体のメンバの他に、ラベル、タグ、または通常の識別子としても使われています。
../intro_demo.c:12:13:warning:c_builtin:W0027:UNC:X99:ポインタ型の変数に対して比較演算が行われています。
../intro_demo.c:16:14:warning:c_builtin:W0422:UNC:X99:値が NULL になることがあるポインタに対して間接参照が行われています。
../intro_demo.c:31:13:warning:c_builtin:W0613:UNC:X99:この制御式の値は常に偽になります。
...snip...
../intro_demo.c:55:9:warning:c_builtin:W9001:UNC:X99:この文には制御が到達しません。
../intro_demo.c:2:1:warning:c_builtin:W0071:UNC:X99:インクルードされている "../useless_header.h" の内容は翻訳単位の中で全く参照されていません。削除することができます。
../intro_demo.c:61:19:warning:c_builtin:W0628:UNC:X99:関数 `int bar(void)' が定義されていますが、このプロジェクトでは使われていません。

3.2.3 ヘルプメッセージ

Usage: adlint [options] [source-file...]
Options:
  -t FILE, --traits FILE         Use FILE as traits file (mandatory)
  -l FILE, --list-file FILE      Use FILE as list file
  -o DIR, --output-dir DIR       Output result files to DIR
  -p NUM, --strip NUM            Use source file names from which stripped NUM
                                 leading components as the base name of output
                                 files
  -v, --verbose                  Increase verbosity but suppress message output
      --version                  Display version information
      --copyright                Display copyright information
      --prefix                   Display prefix directory of AdLint
  -h, --help                     Display this message


Next: , Previous: AdLint Command, Up: Command

3.3 adlint_sma コマンド

3.3.1 機能

コマンドラインで指定した解析対象ソースファイルのシングルモジュール解析 (コンパ イルフェーズに対応する解析) のみを実行します。

シングルモジュール解析結果として、ソースファイル毎に下記のファイルを作成します 。

3.3.2 使用方法

adlintize コマンドにより設定ファイルの雛形を 作成したディレクトリで、下記のように adlint_sma コマンドを起動すると シングルモジュール解析のみを実行可能です。

% adlint_sma -v -t adlint_traits.yml -o . -p 1 ../intro_demo.c
               ../intro_demo.c [fin] |============================| 0.134s
  1.062s user, 0.843s system, 00:00:01.90 total

テキストエディタや統合開発環境などと連携する場合、下記のように -v,--verbose オプションを指定しないことで、進捗表示を行わずコンパイラ と同じようにメッセージを stderr に出力することがきます。

% adlint_sma -t adlint_traits.yml -o . -p 1 ../intro_demo.c
../intro_demo.c:6:9:warning:c_builtin:W0492:UNC:X99:同じ識別子名 `i' が構造体/共用体のメンバの他に、ラベル、タグ、または通常の識別子としても使われています。
../intro_demo.c:12:13:warning:c_builtin:W0027:UNC:X99:ポインタ型の変数に対して比較演算が行われています。
../intro_demo.c:16:14:warning:c_builtin:W0422:UNC:X99:値が NULL になることがあるポインタに対して間接参照が行われています。
../intro_demo.c:31:13:warning:c_builtin:W0613:UNC:X99:この制御式の値は常に偽になります。
...snip...
../intro_demo.c:55:9:warning:c_builtin:W9001:UNC:X99:この文には制御が到達しません。
../intro_demo.c:2:1:warning:c_builtin:W0071:UNC:X99:インクルードされている "../useless_header.h" の内容は翻訳単位の中で全く参照されていません。削除することができます。

3.3.3 ヘルプメッセージ

Usage: adlint_sma [options] source-file...
Options:
  -t FILE, --traits FILE         Use FILE as traits file (mandatory)
  -o DIR, --output-dir DIR       Output result files to DIR
  -p NUM, --strip NUM            Use source file names from which stripped NUM
                                 leading components as the base name of output
                                 files
  -v, --verbose                  Increase verbosity but suppress message output
      --version                  Display version information
      --copyright                Display copyright information
      --prefix                   Display prefix directory of AdLint
  -h, --help                     Display this message


Next: , Previous: AdLint SMA Command, Up: Command

3.4 adlint_cma コマンド

3.4.1 機能

コマンドラインで指定した全シングルモジュール解析のメトリクス測定結果をもとに、 クロスモジュール解析 (リンクフェーズに対応する解析) のみを実行します。

クロスモジュール解析結果として、下記のファイルを作成します。

3.4.2 使用方法

adlintize コマンドにより設定ファイルの雛形を 作成したディレクトリで、adlint_sma コマンド によるシングルモジュール解析を実行後に下記のように adlint_cma コマン ドを起動するとクロスモジュール解析のみを実行可能です。

% ls *.c.met.csv
intro_demo.c.met.csv
% adlint_cma -v -t adlint_traits.yml -o . intro_demo.c.met.csv
                    intro_demo [fin] |============================| 0.011s
  1.203s user, 0.843s system, 00:00:02.04 total

テキストエディタや統合開発環境などと連携する場合、下記のように -v,--verbose オプションを指定しないことで、進捗表示を行わずリンカと同 じようにメッセージを stderr に出力することができます。

% adlint_cma -t adlint_traits.yml -o . intro_demo.c.met.csv
../intro_demo.c:61:19:warning:c_builtin:W0628:UNC:X99:関数 `int bar(void)' が定義されていますが、このプロジェクトでは使われていません。

3.4.3 ヘルプメッセージ

Usage: adlint_cma [options] sma-metric-file...
Options:
  -t FILE, --traits FILE         Use FILE as traits file (mandatory)
  -o DIR, --output-dir DIR       Output result files to DIR
  -v, --verbose                  Increase verbosity but suppress message output
      --version                  Display version information
      --copyright                Display copyright information
      --prefix                   Display prefix directory of AdLint
  -h, --help                     Display this message


Previous: AdLint CMA Command, Up: Command

3.5 adlint_chk コマンド

3.5.1 機能

コマンドラインで指定した解析対象ソースファイルの前処理のみを実行することで、 特性ファイル の内容を検証します。

3.5.2 使用方法

adlintize コマンドにより設定ファイルの雛形を 作成し、解析対象プロジェクトに合わせて 特性ファイル を編集した後 で、下記のように adlint_chk コマンドを起動すると前処理を実行し 特性ファイル の内容を検証可能です。

% adlint_chk -v -t adlint_traits.yml -o . -p 1 ../intro_demo.c
               ../intro_demo.c [fin] |============================| 0.047s
  0.812s user, 0.875s system, 00:00:01.68 total

ヘッダファイルのインクルードパスが正しく設定されていない場合は、下記のようにエ ラーが発生し、ソースファイルに該当する *.c.msg.csv ファイルを確認するこ とで、どのヘッダファイルがインクルードできなかったかを確認可能です。

% adlint_chk -v -t adlint_traits.yml -o . -p 1 ../intro_demo.c
               ../intro_demo.c [cpp] |=======                     | 0.006s!
An error was occurred while processing `../intro_demo.c'.
See `intro_demo.c.msg.csv' and `intro_demo.c.log' for more details.

% tail intro_demo.c.msg.csv
E,../intro_demo.c,1,1,E0009,ヘッダファイル <stdio.h> が見つかりません。
X,../intro_demo.c,1,1,X0003,回復不能なエラーにより解析処理を中断しました。詳細は `intro_demo.c.msg.csv' 及び `intro_demo.c.log' を確認して下さい。

3.5.3 ヘルプメッセージ

Usage: adlint_chk [options] source-file...
Options:
  -t FILE, --traits FILE         Use FILE as traits file (mandatory)
  -o DIR, --output-dir DIR       Output result files to DIR
  -p NUM, --strip NUM            Use source file names from which stripped NUM
                                 leading components as the base name of output
                                 files
  -v, --verbose                  Increase verbosity but suppress message output
      --version                  Display version information
      --copyright                Display copyright information
      --prefix                   Display prefix directory of AdLint
  -h, --help                     Display this message


Next: , Previous: Command, Up: Top

4 入力仕様


Next: , Up: Input

4.1 入力ファイル

下記 2 種類のファイルにより解析動作を設定します。

特性ファイル
解析処理の方法を YAML 形式で記述します。
メッセージ定義ファイル
メッセージカタログを YAML 形式で記述します。

特性ファイルは、adlint、adlint_sma、adlint_cma コマンドのオプション --traits でパス名を指定します。

メッセージ定義ファイルは、AdLint インストールパス内の etc/mesg.d 内にイ ンストールされます。 adlint、adlint_sma、adlint_cma コマンド は、メッセージ特性の language 項目で指定した言語に従い、適切なメッセージ定義ファイルを選択し ます。


Next: , Previous: Input Files, Up: Input

4.2 特性ファイル

プロジェクト特性、コンパイラ特性、 リンカ特性、メッセージ特性 を 単一の YAML 形式の設定ファイル(サンプル) に記述します。

下記のように解析対象プロジェクトのルートディレクトリで adlintize コマンドを実行すると、そのプロジェクト用の特性ファイル adlint_traits.yml の雛形、および、解析手順を自動化する GNUmakefile やシェルスクリプトなどを生成することができます。

% cd project
% adlintize -o adlint
% ls adlint
GNUmakefile     adlint_all.sh   adlint_files.txt  adlint_traits.yml
adlint_all.bat  adlint_cinit.h  adlint_pinit.h

後述の特性ファイルの各設定項目には、環境変数を指定することもできます。

例えば、設定項目 item に、環境変数 ENV_VAR の値を指定する場合は下 記のように記述します。

  item: $ENV_VAR

また、文字列形式の設定項目に、環境変数の値を埋め込んだ文字列を指定する場合は下 記のように記述します。

  item: "prefix${ENV_VAR}suffix"

ディレクトリパス名の配列を指定する項目では、下記のように一つの環境変数の値によ り複数のパス名を指定することもできます。

% export ENV_VAR="/usr/local/include:/usr/include"
  include_path:
    - $ENV_VAR


Next: , Up: Traits

4.2.1 グローバル特性

グローバル特性は、特性ファイルのルート項目で設定します。

No. 項目名 形式 内容
1 version 文字列 特性ファイルフォーマットのバージョンを表します。この項目は編集してはいけません 。
2 exam_packages 文字列の配列 静的解析に用いるソースコード検査パッケージの名前を列挙します。

"c_builtin" は AdLint 本体に組み込み済みの検査パッケージ名です。 また、今後さまざまな用途に特化したオプションのソースコード検査パッケージを開発 する予定です。

例えば、adlint-exam-c_ansi という、ソースコードが ANSI C に準拠している かを検査するパッケージをインストールした場合、exam_packages を下記のよう に編集して解析することができます。

以下の場合は、ANSI C 準拠の検査パッケージのみが実行されます。

     exam_packages:
       - "c_ansi"

以下の場合は、AdLint 組み込みの検査パッケージと、ANSI C 準拠の検査パッケージが実 行されます。

     exam_packages:
       - "c_builtin"
       - "c_ansi"



Next: , Previous: Global Traits, Up: Traits

4.2.2 プロジェクト特性

プロジェクト特性は、特性ファイルの project_traits 配下の項目で設定します 。

No. 項目名 形式 内容
1 project_name 文字列 プロジェクト名を設定します。
2 project_root 文字列 解析対象プロジェクトのルートディレクトリを設定します。
3 target_files:inclusion_paths 文字列の配列 解析対象ソースファイルが存在する上位ディレクトリのパス名を設定します。 各エントリの文字列は、`:' (Windows 環境では `;') を区切り文字とし て複数のパス名を設定できます。
4 target_files:exclusion_paths 文字列の配列 target_files:inclusion_paths で指定したディレクトリ配下のファイルで、解析対象から除外するソースファイルが存在するディレクトリを設定します。 解析対象プロジェクト中にサードパーティ製ライブラリのソースコードを含み、それら のソースファイルに関するコードチェックを行いたくない場合などに指定します。 各エントリの文字列は、`:' (Windows 環境では `;') を区切り文字とし て複数のパス名を設定できます。
5 initial_header 文字列 解析対象ソースファイルの先頭に自動でインクルードされるヘッダファイルを指定しま す。このファイルには、プロジェクト固有のマクロ定義などを記述します。
6 file_search_paths 文字列の配列 プロジェクト固有のインクルードファイルの探索パスを設定します。 各エントリの文字列は、`:' (Windows 環境では `;') を区切り文字とし て複数のパス名を設定できます。
7 coding_style:indent_style 文字列 コードの字下げスタイルを "K&R"、"Allman"、"GNU" から選択し て設定します。

"K&R" スタイルは、

     int foo(int i)
     {
         if (i == 0) {
             return 0;
         }
         return i;
     }

となります。

"Allman" スタイルは、

     int foo(int i)
     {
         if (i == 0)
         {
             return 0;
         }
         return i;
     }

となります。

"GNU" スタイルは、

     int
     foo(int i)
     {
       if (i == 0)
         {
           return 0;
         }
       return i;
     }

となります。

8 coding_style:tab_width 整数値 タブ文字の見た目上の桁数を設定します。
9 coding_style:indent_width 整数値 インデントの見た目上の桁数を設定します。
10 file_encoding 文字列 ソースファイルの文字エンコーディングを設定します。値が設定されていない場合は "ASCII-8BIT" として処理します。


Next: , Previous: Project Traits, Up: Traits

4.2.3 コンパイラ特性

コンパイラ特性は、compiler_traits 配下の項目で設定します。

No. 項目名 形式 内容
1 initial_header 文字列 解析対象ソースファイルの先頭、かつ、プロジ ェクト固有の initial_header より前に自動でインクルードされるヘッダファ イルを指定します。このファイルには、コンパイラ固有の定義済みマクロや型定義など を記述します。
2 file_search_paths 文字列の配列 コンパイラ固有のインクルードファイルの探索パスを設定します。 各エントリの文字列は、`:' (Windows 環境では `;') を区切り文字とし て複数のパス名を設定できます。
3 standard_types:char_size 整数値 char 型ファミリのサイズをビット単位で設定します。
4 standard_types:char_alignment 整数値 char 型ファミリのメモリアライメントをビット単位で設定します。
5 standard_types:short_size 整数値 short 型ファミリのサイズをビット単位で設定します。
6 standard_types:short_alignment 整数値 short 型ファミリのメモリアライメントをビット単位で設定します。
7 standard_types:int_size 整数値 int 型ファミリのサイズをビット単位で設定します。
8 standard_types:int_alignment 整数値 int 型ファミリのメモリアライメントをビット単位で設定します。
9 standard_types:long_size 整数値 long int 型ファミリのサイズをビット単位で設定します。
10 standard_types:long_alignment 整数値 long int 型ファミリのメモリアライメントをビット単位で設定します。
11 standard_types:long_long_size 整数値 long long int 型ファミリのサイズをビット単位で設定します。
12 standard_types:long_long_alignment 整数値 long long int 型ファミリのメモリアライメントをビット単位で設定します。
13 standard_types:float_size 整数値 float 型のサイズをビット単位で設定します。
14 standard_types:float_alignment 整数値 float 型のメモリアライメントをビット単位で設定します。
15 standard_types:double_size 整数値 double 型のサイズをビット単位で設定します。
16 standard_types:double_alignment 整数値 double 型のメモリアライメントをビット単位で設定します。
17 standard_types:long_double_size 整数値 long double 型のサイズをビット単位で設定します。
18 standard_types:long_double_alignment 整数値 long double 型のメモリアライメントをビット単位で設定します。
19 standard_types:code_ptr_size 整数値 関数へのポインタ型のサイズをビット単位で設定します。
20 standard_types:code_ptr_alignment 整数値 関数へのポインタ型のメモリアライメントをビット単位で設定します。
21 standard_types:data_ptr_size 整数値 データへのポインタ型のサイズをビット単位で設定します。
22 standard_types:data_ptr_alignment 整数値 データへのポインタ型のメモリアライメントをビット単位で設定します。
23 standard_types:char_as_unsigned_char 真偽値 `char' 型を `unsigned char' 型として扱う場合 true を指定します。
24 arithmetic:logical_right_shift 真偽値 右シフト式 `>>' を算術シフトではなく、論理シフトとして扱う場合 true を指 定します。
25 identifier_max 整数値 コンパイラにより識別可能なシンボルの最大長を指定します。
26 extension_substitutions 文字列のマップ コンパイラ固有の拡張機能を調整するためのトークン置換パターンを指定します。 AdLint は、ここで指定した拡張機能の使用箇所を W0061 メッセージによって警 告します。

`__attribute__ ( 任意のトークン列 )' というトークン列をプリプロセス後に 削除しつつ W0061 メッセージによる警告を出力する場合は、下記のように指定し ます。

     extension_substitutions:
       "__attribute__(__adlint__any)": ""

また、`__restrict' というトークンを `restrict' に置換しつつ W0061 メッセージによる警告を出力する場合は、下記のように指定します。

     extension_substitutions:
       "__restrict": "restrict"


27 arbitrary_substitutions 文字列のマップ extension_substitutions と同様に、プリプロセス後にトークン列を置換するための項目ですが、W0061 メ ッセージを出力しない点が異なります。


Next: , Previous: Compiler Traits, Up: Traits

4.2.4 リンカ特性

リンカ特性は、linker_traits 配下の項目で設定します。

No. 項目名 形式 内容
1 identifier_max 整数値 リンカにより識別可能な外部シンボルの最大長を指定します。
2 identifier_ignore_case 真偽値 リンカにより外部シンボルを識別する際、大文字小文字を区別するかを指定します。


Previous: Linker Traits, Up: Traits

4.2.5 メッセージ特性

メッセージ特性は、message_traits 配下の項目で設定します。

No. 項目名 形式 内容
1 language 文字列 メッセージ本文の言語を指定します。(現時点では) "en_US" か "ja_JP" が指定可能です。
2 individual_suppression 真偽値 解析対象ファイル内の ソースコード注釈 による警告メッセージの抑止機能を有効化します。

true の場合、注釈によるメッセージ抑止が可能になります。

3 exclusion:categories 文字列の配列 exam_packages で指定したソースコード検査パッ ケージ中のコードチェック機能で、実行を除外するものをメッセージのカテゴリにより 指定します。
4 exclusion:severities 正規表現を表す文字列 exam_packages で指定したソースコード検査パッ ケージ中のコードチェック機能で、実行を除外するものをメッセージの深刻度により指 定します。
5 exclusion:messages メッセージ ID と文字列のマップ exam_packages で指定したソースコード検査パッ ケージ中のコードチェック機能で、実行を除外するものをメッセージ ID により指定し ます。

メッセージ ID は、ソースコード検査パッケージをまたいでユニークではない場合があ るため、文字列として該当するメッセージ ID が含まれるソースコード検査パッケージ 名も指定してください。

6 inclusion:messages メッセージ ID と文字列のマップ exclusion セクションの設定内容により除外しましたが、メッセージ ID 指定で 特定のコードチェック機能を含める場合に指定します。

例えば、exclusion:categories でカテ ゴリ指定により除外したコードチェック機能群のうち、特定のもののみを実行したい場 合を想定した項目です。

7 change_list メッセージ ID と変更内容のマップ 特定メッセージの定義情報を変更する場合に指定します。

例えば、"c_builtin" パッケージの W9999 メッセージを変更する場合、 下記のように設定します。

     change_list:
       W9999:
         package: "c_builtin"
         classes:
           - "新しいカテゴリ名1:深刻度1"
           - "新しいカテゴリ名2:深刻度2"
         format: "新しいメッセージフォーマット。"



Next: , Previous: Traits, Up: Input

4.3 メッセージ定義ファイル

AdLint が出力する全てのエラー、警告メッセージを YAML 形 式の設定ファイルに記述します。 通常、このファイルは直接編集することはありません。 メッセージ内容を変更する場合は、特性ファイルの change_list 項目で変更内容を指定してください。


Previous: Message Definition, Up: Input

4.4 ソースコード注釈

解析対象のソースコード中にコメントとして、AdLint の解析動作を制御するための注釈 を記述することができます。

4.4.1 警告メッセージ抑止注釈

通常のコメントに ADLINT:SF で始まる注釈を含めることで、該当ファイルの解 析時に指定した警告メッセージを抑止することができます。 また、ADLINT:SL で始まる注釈を含めると、該当行の解析時に指定した警告メッ セージを抑止することができます。

注釈の書式、および、使用例を下記に示します。

• 共通定義

     message_specifier_list : qualified_message_specifier
                            | unqualified_message_specifier
                            | message_specifier_list qualified_message_specifier
                            | message_specifier_list unqualified_message_specifier
     
     qualified_message_specifier : ':' package_name unqualified_message_specifier
     
     unqualified_message_specifier : ':' '[' message_name_list ']'
     
     message_name_list : message_name
                       | message_name_list ',' message_name
     
     message_name : 'W' [0-9]{4}
     
     package_name : 特性ファイルの exam_packages に指定した文字列

• ファイル毎の警告メッセージ抑止注釈

     file_wise_suppressor_annotation : "/*" file_wise_suppressor_head message_specifier_list "*/"
                                     | "//" file_wise_suppressor_head message_specifier_list
     
     file_wise_suppressor_head : "ADLINT:SF"

• 行毎の警告メッセージ抑止注釈

     line_wise_suppressor_annotation : "/*" line_wise_suppressor_head message_specifier_list "*/"
                                     | "//" line_wise_suppressor_head message_specifier_list
     
     line_wise_suppressor_head : "ADLINT:SL"

• サンプルコード

/* ADLINT:SF:[W0001,W0002] (to suppress W0001 and W0002 of all exam-packages in this file.) */
#include <stdio.h>

extern int i; /* ADLINT:SL:[W0003] (to suppress W0003 of all exam-packages only at this line.) */
extern int j; /* ADLINT:SL:c_staging:[W2001] (to suppress W2001 of `c_staging' exam-package only at this line.) */

void foo(void)
{
    printf("%d\n", i + j);
}


Next: , Previous: Input, Up: Top

5 出力仕様


Next: , Up: Output

5.1 出力ファイル

シングルモジュール解析の結果を、下記 4 種類のファイルに出力します。

No. 名称 ファイル名 内容
1 プリプロセス済みソース <拡張子を除いたソースファイル名>.i # で始まる行はラインマーカーです。
2 メトリクスファイル <ソースファイル名>.met.csv メトリクス、コード情報を CSV 形式で出力します。
3 メッセージファイル <ソースファイル名>.msg.csv エラー、警告メッセージを CSV 形式で出力します。
4 ログファイル <ソースファイル名>.log シングルモジュール解析処理のログを出力します。

クロスモジュール解析の結果を、下記 3 種類のファイルに出力します。

No. 名称 ファイル名 内容
1 メトリクスファイル <プロジェクト名>.met.csv メトリクス情報を CSV 形式で出力します。
2 メッセージファイル <プロジェクト名>.msg.csv 警告メッセージを CSV 形式で出力します。
3 ログファイル <プロジェクト名>.log クロスモジュール解析処理のログを出力します。


Next: , Previous: Output Files, Up: Output

5.2 共通定義

     version_number
       : major_version '.' minor_version '.' patch_level
     
     major_version : 整数値
     
     minor_version : 整数値
     
     patch_level : 整数値
     
     exec_timestamp : 年 '-' 月 '-' 日 ' ' 時 ':' 分 ':' 秒 ':' タイムゾーン
     
     exec_working_directory : 解析を実行したディレクトリのフルパス名
     
     new_line : 実行環境依存の改行文字列
     
     file_path : 実行環境依存のファイルパス名
     
     line_no : 整数値
     
     lines : 整数値
     
     column_no : 整数値
     
     location : file_path ',' line_no ',' column_no
     
     function_identifier
       : function_name ',' function_signature
     
     function_name : c_identifier
     
     function_signature : c_declaration_specifiers c_declarator
     
     function_linkage_type
       : 'I'  <- Internal
       | 'X'  <- eXternal
     
     function_scope_type
       : 'F'  <- File
       | 'B'  <- Block
     
     function_declaration_type
       : 'E'  <- Explicit
       | 'I'  <- Implicit
     
     type_name : c_identifier
     
     type_rep : c_declaration
     
     variable_name : c_identifier
     
     initializer_rep : c_initializer
     
     assignment_rep : c_assignment_operator c_assignment_expression
     
     macro_name : c_identifier
     
     macro_value
       :
       | pp_tokens
     
     pp_tokens : c_pp_tokens
     
     exam_package_name : 任意の文字列
     
     message_id
       : 'W' [0-9]{4}
       | 'E' [0-9]{4}
       | 'C' [0-9]{4}
     
     message_category : [A-Z]{3}
     
     message_severity : [A-Z][0-9]{2}
     
     message_text : 任意の文字列


Next: , Previous: Common, Up: Output

5.3 メトリクスファイル

5.3.1 バージョンレコード

     metrics_version_record
       : metrics_version_head ',' version_number ',' exec_timestamp ',' exec_working_directory
     
     metrics_version_head : "VER"

• 出力例

     VER,0.6.4,2012-02-16 14:10:59 +0900,/home/yanoh/intro_demo

5.3.2 宣言レコード

     declaration_record
       : declaration_head ',' location ',' typedcl_record_body
       | declaration_head ',' location ',' gvardcl_record_body
       | declaration_head ',' location ',' funcdcl_record_body
     
     declaration_head : "DCL"

• 型宣言レコード

     typedcl_record_body
       : 'T' ',' typedcl_type ',' type_name ',' type_rep
     
     typedcl_type
       : 'T'  <- typedef
       | 'S'  <- struct
       | 'U'  <- union
       | 'E'  <- enum

• 外部変数宣言レコード

     gvardcl_record_body
       : 'V' ',' variable_name ',' type_rep

• 関数宣言レコード

     funcdcl_record_body
       : 'F' ',' function_linkage_type ',' function_scope_type ',' function_declaration_type ',' function_identifier

• 出力例

 1: typedef int *int_ptr;
 2:
 3: struct Foo {
 4:     int i;
 5:     long l;
 6: };
 7:
 8: union Bar {
 9:     int i;
10:     char c;
11: };
12:
13: enum Color {
14:     RED = 1,
15:     GREEN,
16:     BLUE
17: };
18:
19: extern int global_1;
20:
21: extern int foo(long);
     DCL,test.c,1,14,T,T,int_ptr,int *
     DCL,test.c,3,8,T,S,Foo,struct Foo { int i; long l; }
     DCL,test.c,8,7,T,U,Bar,union Bar { int i; char c; }
     DCL,test.c,13,6,T,E,Color,"enum Color { RED = 1, GREEN, BLUE }"
     DCL,test.c,19,12,V,global_1,int
     DCL,test.c,21,12,F,X,F,E,foo,int foo(long)

5.3.3 定義レコード

     definition_record
       : definition_head ',' location ',' vardef_record_body
       | definition_head ',' location ',' fundef_record_body
       | definition_head ',' location ',' macrodef_record_body
       | definition_head ',' location ',' labeldef_record_body
     
     definition_head : "DEF"

• 変数定義レコード

     vardef_record_body
       : 'V' ',' variable_linkage_type ',' variable_scope_type ',' storage_class_type ',' variable_name ',' type_rep
     
     variable_linkage_type
       : 'I'  <- Internal
       | 'X'  <- eXternal
       | 'N'  <- None
     
     variable_scope_type
       : 'F'  <- File
       | 'B'  <- Block
       | 'P'  <- Parameter
     
     storage_class_type
       : 'A'  <- Auto
       | 'R'  <- Register
       | 'S'  <- Static
       | 'N'  <- None

• 関数定義レコード

     fundef_record_body
       : 'F' ',' function_linkage_type ',' function_scope_type ',' function_identifier ',' lines

• マクロ定義レコード

     macrodef_record_body
       : 'M' ',' macro_name ',' macro_form_type
     
     macro_form_type
       : 'O'  <- Object
       | 'F'  <- Function

• ラベル定義レコード

     labeldef_record_body
       : 'L' ',' label_name
     
     label_name : c_identifier

• 出力例

 1: int global_1;
 2: struct { int i; long l; } global_2;
 3:
 4: static long static_1;
 5: static enum { FOO, BAR, BAZ } static_2;
 6:
 7: int foo(int i, register short s)
 8: {
 9:     static char static_3 = 0;
10:     register int local_1 = i + s + static_3;
11:     auto int local_2 = 0;
12:     int local_3 = 0;
13:     goto end;
14: end:
15:     return local_1 + local_2 + local_3;
16: }
17:
18: static void bar(void) {}
19:
20: #define OBJ_FORM_MACRO (1 + 2)
21: #define MAX(a, b) ((a) < (b) ? (b) : (a))
     DEF,test.c,1,5,V,X,F,N,global_1,int
     DEF,test.c,2,27,V,X,F,N,global_2,struct __adlint__unnamed_1
     DEF,test.c,4,13,V,I,F,S,static_1,long
     DEF,test.c,5,31,V,I,F,S,static_2,enum __adlint__unnamed_2
     DEF,test.c,7,13,V,I,P,N,i,int
     DEF,test.c,7,31,V,I,P,R,s,short
     DEF,test.c,9,17,V,I,B,S,static_3,char
     DEF,test.c,10,18,V,I,B,R,local_1,int
     DEF,test.c,11,14,V,I,B,A,local_2,int
     DEF,test.c,12,9,V,I,B,N,local_3,int
     DEF,test.c,7,5,F,X,F,foo,"int foo(int,short)",10
     DEF,test.c,18,13,F,I,F,bar,void bar(void),1
     DEF,test.c,20,1,M,OBJ_FORM_MACRO,O
     DEF,test.c,21,1,M,MAX,F
     DEF,test.c,14,1,L,end

5.3.4 初期化レコード

     initialization_record
       : initialization_head ',' location ',' variable_name ',' initializer_rep
     
     initialization_head : "INI"

• 出力例

1: int global_1 = 1;
2:
3: int main(void)
4: {
5:     int local_1 = global_1;
6:     int local_2 = local_1 + 1;
7:
8:     return local_1 + local_2;
9: }
     INI,test.c,1,5,global_1,1
     INI,test.c,5,9,local_1,global_1
     INI,test.c,6,9,local_2,local_1 + 1

5.3.5 代入式レコード

     assignment_record
       : assignment_head ',' location ',' variable_name ',' assignment_rep
     
     assignment_head : "ASN"

• 出力例

 1: int main(void)
 2: {
 3:     int i;
 4:
 5:     for (i = 0; i < 10; i++) {
 6:         if (i % 2) {
 7:             i += 1;
 8:         }
 9:     }
10:
11:     return 0;
12: }
     ASN,test.c,5,12,i,= 0
     ASN,test.c,7,15,i,+= 1

5.3.6 依存レコード

     dependency_record
       : dependency_head ',' location ',' include_record_body
       | dependency_head ',' location ',' call_record_body
       | dependency_head ',' location ',' xref_record_body
     
     dependency_head : "DEP"

• インクルードレコード

     include_record_body
       : 'I' ',' included_fpath
     
     included_fpath : '<' file_path '>' | '"' file_path '"'

• 呼び出しレコード

     call_record_body
       : 'C' ',' caller_function ',' callee_function
     
     caller_function : function_identifier
     
     callee_function : function_identifier

• 外部参照レコード

     xref_record_body
       : 'X' ',' xref_variable_record_body
       | 'X' ',' xref_function_record_body
     
     xref_variable_record_body
       : 'V' ',' accessor_function ',' access_type ',' accessee_variable
     
     xref_function_record_body
       : 'F' ',' accessor_function ',' access_type ',' accessee_function
     
     accessor_function : function_identifier
     
     access_type : 'R' | 'W'
     
     accessee_variable : variable_name
     
     accessee_function : function_identifier

• 出力例

 1: #include <stdio.h>
 2: #include "test.h"
 3:
 4: extern int global;
 5:
 6: int foo(long l)
 7: {
 8:     int i = global;
 9:
10:     return l - i;
11: }
12:
13: int main(void)
14: {
15:     int (*p)(long) = &foo;
16:
17:     global = 5;
18:
19:     return (*p)(10);
20: }
     DEP,test.c,1,1,I,</usr/include/stdio.h>
     DEP,test.c,2,1,I,"""test.h"""
     DEP,test.c,8,13,X,V,foo,int foo(long),R,global
     DEP,test.c,19,16,C,main,int main(void),foo,int foo(long)
     DEP,test.c,15,23,X,F,main,int main(void),R,foo,int foo(long)
     DEP,test.c,17,12,X,V,main,int main(void),W,global

5.3.7 リテラルレコード

     literal_record
       : literal_head ',' location ',' literal_type ',' literal_prefix ',' literal_suffix ',' literal_value
     
     literal_head : "LIT"
     
     literal_type
       : 'DN'  <- Decimal Number
       | 'HN'  <- Hexadecimal Number
       | 'ON'  <- Octal Number
       | 'BN'  <- Binary Number
       | 'FN'  <- Floating point Number
       | 'CN'  <- Character Narrow
       | 'SN'  <- String Narrow
       | 'CW'  <- Character Wide
       | 'SW'  <- String Wide
     
     literal_prefix
       :
       | 'l'  | 'L'
       | '0'
       | '0x' | '0X'
       | '0b' | '0B'
     
     literal_suffix
       :
       | 'u'   | 'U'
       | 'l'   | 'L'
       | 'ul'  | 'Ul'  | 'uL'  | 'UL'
       | 'ull' | 'Ull' | 'uLL' | 'ULL'
       | 'll'  | 'LL'
       | 'f'   | 'F'
     
     literal_value
       : c_constant
       | c_string_literal

• 出力例

1: unsigned int i = 0xFFU;
2:
3: int foo(long l)
4: {
5:     const wchar_t *s = L"foobar";
6:
7:     return 0;
8: }
     LIT,test.c,1,18,HN,0x,U,0xFFU
     LIT,test.c,5,24,SW,L,,"L""foobar"""

5.3.8 プリプロセスレコード

     preprocess_record
       : preprocess_head ',' location ',' pp_directive ',' pp_tokens
     
     preprocess_head : "PRE"
     
     pp_directive
       : "#if"
       | "#ifdef"
       | "#ifndef"
       | "#elif"
       | "#else"
       | "#endif"
       | "#include"
       | "#define"
       | "#undef"
       | "#line"
       | "#error"
       | "#pragma"
       | "#"

• 出力例

 1: #pragma once
 2:
 3: #if defined(NDEBUG)
 4: void debug(const char *msg) {}
 5: #else
 6: #include <stdio.h>
 7: void debug(const char *msg)
 8: {
 9:     puts(msg);
10: }
11: #endif
     PRE,test.c,1,1,#pragma,once
     PRE,test.c,3,1,#if,defined(NDEBUG)
     PRE,test.c,5,1,#else,
     PRE,test.c,6,1,#include,<stdio.h>
     PRE,test.c,11,1,#endif,

5.3.9 メトリック値レコード

     metric_record
       : metric_head ',' file_metric_record_body
       | metric_head ',' func_metric_record_body
     
     metric_head : "MET"
     
     file_metric_record_body
       : file_metric_name ',' file_path ',' metric_value
     
     func_metric_record_body
       : func_metric_name ',' function_identifier ',' location ',' metric_value
     
     file_metric_name
       : "FL_STMT"  <- ステートメント数
       | "FL_FUNC"  <- 関数の数
     
     func_metric_name
       : "FN_STMT"  <- ステートメント数
       | "FN_UNRC"  <- 到達しないステートメント数
       | "FN_LINE"  <- 物理行数
       | "FN_PARA"  <- パラメータ数
       | "FN_UNUV"  <- 使用/再使用されない変数の数
       | "FN_CSUB"  <- 関数を呼び出す箇所数
       | "FN_CALL"  <- 関数から呼び出される箇所数
       | "FN_GOTO"  <- goto 文の数
       | "FN_RETN"  <- 関数内の戻り点の数
       | "FN_UELS"  <- else なしの if 文数
       | "FN_NEST"  <- 制御フローグラフの最大ネスト数
       | "FN_PATH"  <- 推定静的パス数
       | "FN_CYCM"  <- サイクロマティック複雑度
     
     metric_value : 整数値


Previous: Metrics File, Up: Output

5.4 メッセージファイル

     message_file
       : message_version_record
       | message_version_record new_line message_list
     
     message_version_record
       : 'V' ',' version_number ',' exec_timestamp ',' exec_working_directory
     
     message_list
       : error_record
       | warning_record
       | message_list new_line error_record
       | message_list new_line warning_record
     
     error_record
       : error_line new_line context_line_list
     
     error_line
       : 'E' ',' file_path ',' line_no ',' column_no ',' exam_package_name ',' message_id ',' message_category ',' message_severity ',' message_text
     
     warning_record
       : warning_line new_line context_line_list
     
     warning_line
       : 'W' ',' file_path ',' line_no ',' column_no ',' exam_package_name ',' message_id ',' message_category ',' message_severity ',' message_text
     
     context_line_list
       :
       | context_line new_line context_line_list
     
     context_line
       : 'C' ',' file_path ',' line_no ',' column_no ',' exam_package_name ',' message_id ',' message_category ',' message_severity ',' message_text


Next: , Previous: Output, Up: Top

6 メッセージ一覧


Next: , Up: Messages

6.1 X0001

6.1.1 メッセージ本文

不明な例外条件 `%s' を検出しました。

6.1.2 内容

AdLint 内部でエラーが発生したことを示します。

このメッセージが出力された場合、該当ソースファイル、特性ファイル 、メッセージファイル、ログファイルとともに AdLint 開発チー ムへご報告いただければ、AdLint の品質向上につなげることができます。

6.1.3 サンプルコード

なし。

6.1.4 関連メッセージ

なし。

6.1.5 対応バージョン

1.0.0


Next: , Previous: X0001, Up: Messages

6.2 X0002

6.2.1 メッセージ本文

不正なメッセージ ID `%s' を検出しました。

6.2.2 内容

AdLint が内部で使用するメッセージカタログファイルが壊れている可能性があります。

AdLint を再インストールしても問題が解決されない場合は、AdLint 開発チームへご報 告ください。

6.2.3 サンプルコード

なし。

6.2.4 関連メッセージ

なし。

6.2.5 対応バージョン

1.0.0


Next: , Previous: X0002, Up: Messages

6.3 X0003

6.3.1 メッセージ本文

回復不能なエラーにより解析処理を中断しました。詳細は `%s' 及び `%s' を確認して下さい。

6.3.2 内容

ヘッダファイルが見つからない、ソースファイルの構文解析ができないなど、AdLint が 解析を続行できないエラーを検知した場合に出力されます。

この問題の多くは、特性ファイルの内容を見直すことで解決できます。

6.3.3 サンプルコード

なし。

6.3.4 関連メッセージ

なし。

6.3.5 対応バージョン

1.0.0


Next: , Previous: X0003, Up: Messages

6.4 X0004

6.4.1 メッセージ本文

不正なメッセージフォーマット `%s' を検出しました。

6.4.2 内容

AdLint が内部で使用するメッセージカタログファイルが壊れている可能性があります。

AdLint を再インストールしても問題が解決されない場合は、AdLint 開発チームへご報 告ください。

6.4.3 サンプルコード

なし。

6.4.4 関連メッセージ

なし。

6.4.5 対応バージョン

1.0.0


Next: , Previous: X0004, Up: Messages

6.5 E0004

6.5.1 メッセージ本文

対応する #endif 行がありません。

6.5.2 内容

#if、#ifdef、#ifndef ディレクティブに対応する #endif ディレクティブが見つからない場合に出力されます。

6.5.3 サンプルコード

#if DEBUG
  int i = 0;
#else
  int i = 1;

6.5.4 関連メッセージ

なし。

6.5.5 対応バージョン

1.0.0


Next: , Previous: E0004, Up: Messages

6.6 E0007

6.6.1 メッセージ本文

条件式中のトークン `%s' で構文エラーを検出しました。条件式を偽として評価します。

6.6.2 内容

#if、#elif ディレクティブの条件式を評価中に構文エラーを検知した場 合に出力します。

このメッセージが出力された場合、該当する条件式は偽として評価されます。

6.6.3 サンプルコード

なし。

6.6.4 関連メッセージ

なし。

6.6.5 対応バージョン

1.0.0


Next: , Previous: E0007, Up: Messages

6.7 E0008

6.7.1 メッセージ本文

トークン `%s' で構文エラーを検知しました。

6.7.2 内容

このメッセージはプリプロセス後のソースファイルを構文解析できない場合に出力され ます。

ビルドに使用するコンパイラ独自の拡張機能を使用している場合は、 特性ファイルで該当するトークン列を削除するように指定すれば解決で きます。

6.7.3 サンプルコード

なし。

6.7.4 関連メッセージ

なし。

6.7.5 対応バージョン

1.0.0


Next: , Previous: E0008, Up: Messages

6.8 E0009

6.8.1 メッセージ本文

ヘッダファイル <%s> が見つかりません。

6.8.2 内容

#include <...> ディレクティブでヘッダファイルをインクルードしていますが 、特性ファイルで指定したインクルードパス中に該当するヘッダファイ ルが存在しない場合に出力されます。

特性ファイルのインクルードパス設定を見直すことで解決できます。

6.8.3 サンプルコード

なし。

6.8.4 関連メッセージ

なし。

6.8.5 対応バージョン

1.0.0


Next: , Previous: E0009, Up: Messages

6.9 E0010

6.9.1 メッセージ本文

ヘッダファイル "%s" が見つかりません。

6.9.2 内容

#include "..." ディレクティブでヘッダファイルをインクルードしていますが 、特性ファイルで指定したインクルードパス中に該当するヘッダファイ ルが存在しない場合に出力されます。

特性ファイルのインクルードパス設定を見直すことで解決できます。

6.9.3 サンプルコード

なし。

6.9.4 関連メッセージ

なし。

6.9.5 対応バージョン

1.0.0


Next: , Previous: E0010, Up: Messages

6.10 E0013

6.10.1 メッセージ本文

式に文を含めることはできません。

6.10.2 内容

式の中に文を記述する GCC 拡張機能 (Statement Exprs) を使用した場合に出力されます 。

6.10.3 サンプルコード

#define maxint(a, b) ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
int i = maxint(1, 2); /* E0013 */

6.10.4 関連メッセージ

なし。

6.10.5 対応バージョン

1.0.0


Next: , Previous: E0013, Up: Messages

6.11 E0014

6.11.1 メッセージ本文

ラベルのアドレスを取得するための && 単項演算子は GCC 独自の拡張機能です。

6.11.2 内容

ラベルを値として使用する GCC 拡張機能 (Labels as Values) を使用した場合に出力され ます。

6.11.3 サンプルコード

void *label_ptr = &&foo; /* E0014 */
goto *label_ptr; /* E0015 */
foo:;

6.11.4 関連メッセージ

6.11.5 対応バージョン

1.0.0


Next: , Previous: E0014, Up: Messages

6.12 E0015

6.12.1 メッセージ本文

ラベルのアドレスを指定した goto 文は GCC 独自の拡張機能です。

6.12.2 内容

ラベルを値として使用する GCC 拡張機能 (Labels as Values) を使用した場合に出力され ます。

6.12.3 サンプルコード

void *label_ptr = &&foo; /* E0014 */
goto *label_ptr; /* E0015 */
foo:;

6.12.4 関連メッセージ

6.12.5 対応バージョン

1.0.0


Next: , Previous: E0015, Up: Messages

6.13 E0016

6.13.1 メッセージ本文

終了しないコメントブロックが見つかりました。

6.13.2 内容

/* で開始するブロックコメントが */ で終了されない状態で、翻訳単位 の末尾に到達した場合に出力されます。

6.13.3 サンプルコード

なし。

6.13.4 関連メッセージ

なし。

6.13.5 対応バージョン

1.0.0


Next: , Previous: E0016, Up: Messages

6.14 W0001

6.14.1 メッセージ本文

括弧 `()' のネストの深さが 32 を超えています。このプログラムは、ISO C90 標準規格に厳密に合致していません。

6.14.2 内容

括弧の入れ子レベルは最大 32 までと ISO C 標準規格で定められています。この水準を超えると移植性を損ないます。

6.14.3 サンプルコード

int a = 10;
int b = 20;
int c = (((((((((((((((((((((((((((((((((a + b))))))))))))))))))))))))))))))))); /* W0001 */

6.14.4 関連メッセージ

なし。

6.14.5 対応バージョン

1.0.0


Next: , Previous: W0001, Up: Messages

6.15 W0002

6.15.1 メッセージ本文

関数 `%s()' の定義において、識別子と仮引数宣言を分けて記述するのは、古いスタイルです。

6.15.2 内容

非 ANSI の関数定義は、いまや多くのエンジニアにとって馴染みがないものといえます。そのようなエンジニアにとって、解析性が低くなります。

6.15.3 サンプルコード

/* function definition in K&R style */
int func(arg) /* W0002 */
char arg;
{
    return 0;
}

6.15.4 関連メッセージ

なし。

6.15.5 対応バージョン

1.0.0


Next: , Previous: W0002, Up: Messages

6.16 W0003

6.16.1 メッセージ本文

この switch 文には default ラベルが含まれていません。

6.16.2 内容

default 条件を持たない switch 文では、case ラベルの条件に該当しない場合に何も処理が行われないことになり、多くの場合、プログラマの意図しない動作になります。

6.16.3 サンプルコード

int foo(int i)
{
    int j;

    switch(i) { /* W0003 */
    case 1:
        j = 1;
        break;
    case 2:
        j = 2;
        break;
    case 3:
        j = 3;
        break;
    }

    return j;
}

6.16.4 関連メッセージ

なし。

6.16.5 対応バージョン

1.0.0


Next: , Previous: W0003, Up: Messages

6.17 W0007

6.17.1 メッセージ本文

直前の case 節あるいは default 節の末尾に、break 文または return 文がありません。

6.17.2 内容

case ラベルでは break 文や return 文を書かない限り、次の case ラベルへフォールスルーすることになりますが、 このようなフォールスルーは気づきにくいという点でコードの保守性を低下させます。

6.17.3 サンプルコード

int value;
int number;
switch (number) {
case 1:
    value = 1;
    break;
case 2:
    value = 2;
case 3: /* W0007 */
    value = 3;
    break;
default:
    value = 0;
    break;
}

6.17.4 関連メッセージ

なし。

6.17.5 対応バージョン

1.0.0


Next: , Previous: W0007, Up: Messages

6.18 W0010

6.18.1 メッセージ本文

この三項演算子(条件演算子)のオペランドに副作用があります。

6.18.2 内容

副作用を生じる条件演算子を使用すると、条件によって副作用の内容が変わり、コードが複雑になります。

6.18.3 サンプルコード

x = (a > 0) ? b++ : b--; /* W0010 */

6.18.4 関連メッセージ

なし。

6.18.5 対応バージョン

1.0.0


Next: , Previous: W0010, Up: Messages

6.19 W0013

6.19.1 メッセージ本文

繰り返し文の中で、continue 文が使用されています。

6.19.2 内容

continue 文はしばしば、構造化定理(「順次」「反復」「分岐」)に基づいたコードの構造を壊してしまいます。影響はループ文の中に限定されるため、 goto 文ほど大きなネガティブインパクトはありませんが、利用の際は注意が必要です。

6.19.3 サンプルコード

static void foo(void)
{
    int i;
    int j;

    i++;
    for (i = 1, j = 0; i < 20; i++) {
        j += 2;
        if ((j % i) == 3) {
            continue;  /* W0013 */
        }
    }
}

6.19.4 関連メッセージ

なし。

6.19.5 対応バージョン

1.0.0


Next: , Previous: W0013, Up: Messages

6.20 W0016

6.20.1 メッセージ本文

変換指定子のフィールド幅が 509 文字を超えています。

6.20.2 内容

printf() 関数における変換指定子のフィールド幅は最大 509 文字までと ISO C 標準規格で定められています。この水準を超えると移植性を損ないます。

6.20.3 サンプルコード

printf("%510d\n", a); /* W0016 */

6.20.4 関連メッセージ

6.20.5 対応バージョン

1.0.0


Next: , Previous: W0016, Up: Messages

6.21 W0017

6.21.1 メッセージ本文

変換指定子のフィールド幅が 509 文字を超えています。

6.21.2 内容

scanf() 関数における変換指定子のフィールド幅は最大 509 文字までと ISO C 標準規格で定められています。この水準を超えると移植性を損ないます。

6.21.3 サンプルコード

scanf("%510d", &a); /* W0017 */

6.21.4 関連メッセージ

6.21.5 対応バージョン

1.0.0


Next: , Previous: W0017, Up: Messages

6.22 W0018

6.22.1 メッセージ本文

変換指定子の精度幅が 509 文字を超えています。

6.22.2 内容

変換指定子の精度幅は最大 509 文字までと ISO C 標準規格で定められています。この水準を超えると移植性を損ないます。

6.22.3 サンプルコード

printf("%.510f\n", a); /* W0018 */

6.22.4 関連メッセージ

なし。

6.22.5 対応バージョン

1.0.0


Next: , Previous: W0018, Up: Messages

6.23 W0019

6.23.1 メッセージ本文

このポインタキャストは、const 修飾を削除しているので危険です。

6.23.2 内容

const 修飾された変数は値が変更されないことを前提として使用されます。 そのような変数に const が失われるキャストが実行されると前提が崩れてしまい、意図しない結果を引き起こす可能性があります。

6.23.3 サンプルコード

int *pa;
const int *pb;
pa = (int *) pb; /* W0019 */

6.23.4 関連メッセージ

なし。

6.23.5 対応バージョン

1.0.0


Next: , Previous: W0019, Up: Messages

6.24 W0021

6.24.1 メッセージ本文

このポインタキャストは、volatile 修飾を削除しているので危険です。

6.24.2 内容

volatile 修飾された変数は最適化の対象外にしたいという意図が含まれています。 そのような変数に volatile が失われるキャストが実行されると意図に反して最適化が行われてしまい、 意図しない結果を引き起こす可能性があります。

6.24.3 サンプルコード

int *pa;
volatile int *pb;
pa = (int *) pb; /* W0021 */

6.24.4 関連メッセージ

なし。

6.24.5 対応バージョン

1.0.0


Next: , Previous: W0021, Up: Messages

6.25 W0023

6.25.1 メッセージ本文

ポインタ型の変数に対して算術演算が行われています。

6.25.2 内容

ポインタ演算により意図しないアドレスを使用する可能性が高くなります。

6.25.3 サンプルコード

int *p;
int *q;
long r = p + r; /* W0023 */

6.25.4 関連メッセージ

6.25.5 対応バージョン

1.0.0


Next: , Previous: W0023, Up: Messages

6.26 W0024

6.26.1 メッセージ本文

ポインタ型の変数に対してインクリメントまたはデクリメントが行われています。

6.26.2 内容

ポインタ演算により意図しないアドレスを使用する可能性が高くなります。

6.26.3 サンプルコード

int *p;
p++; /* W0024 */

6.26.4 関連メッセージ

6.26.5 対応バージョン

1.0.0


Next: , Previous: W0024, Up: Messages

6.27 W0025

6.27.1 メッセージ本文

`%s' は、既にこのファイルから直接インクルードされています。

6.27.2 内容

重複したインクルードは意味のない記述です。意味のない不要な記述がコード中にあることで解析性が低下します。

6.27.3 サンプルコード

#include "test.h"
#include "test2.h"
#include "test.h" /* W0025 */

6.27.4 関連メッセージ

6.27.5 対応バージョン

1.0.0


Next: , Previous: W0025, Up: Messages

6.28 W0026

6.28.1 メッセージ本文

`%s' は、既にこのファイルから間接的にインクルードされています。

6.28.2 内容

重複したインクルードは意味のない記述です。意味のない不要な記述がコード中にあることで解析性が低下します。

6.28.3 サンプルコード

test.h

#include "test2.h"

test.c

#include "test.h"
#include "test2.h" /* W0026 */

6.28.4 関連メッセージ

6.28.5 対応バージョン

1.0.0


Next: , Previous: W0026, Up: Messages

6.29 W0027

6.29.1 メッセージ本文

ポインタ型の変数に対して比較演算が行われています。

6.29.2 内容

比較演算子を用いて異なる配列のポインタや異なる構造体のポインタと比較する動作は ISO C90 で未定義のため、予期しない動作を引き起こす可能性があります。

6.29.3 サンプルコード

int *p;
int *q;
if (p < q) { /* W0027 */

6.29.4 関連メッセージ

なし。

6.29.5 対応バージョン

1.0.0


Next: , Previous: W0027, Up: Messages

6.30 W0028

6.30.1 メッセージ本文

NULL ポインタに対して間接参照が行われています。

6.30.2 内容

NULL ポインタが指す値を間接参照する動作は ISO C90 で未定義のため、予期しない動作を引き起こす可能性があります。

6.30.3 サンプルコード

int i = *(int *) NULL; /* W0028 */

6.30.4 関連メッセージ

なし。

6.30.5 対応バージョン

1.0.0


Next: , Previous: W0028, Up: Messages

6.31 W0030

6.31.1 メッセージ本文

NULL ポインタに対して算術演算が行われています。

6.31.2 内容

NULL ポインタに対する算術演算は ISO C90 で未定義のため、予期しない動作を引き起こす可能性があります。

6.31.3 サンプルコード

int *p;
p = (int *) NULL + 1; /* W0030 */

6.31.4 関連メッセージ

なし。

6.31.5 対応バージョン

1.0.0


Next: , Previous: W0030, Up: Messages

6.32 W0031

6.32.1 メッセージ本文

仮引数 `%s' は、この関数の中で使われていません。

6.32.2 内容

未使用の実引数は資源を無駄に使用するという点で効率性を低下させます。またコード中に無駄な要素があることで解析性が低下します。

6.32.3 サンプルコード

int func(int num) /* W0031 */
{
    return 0;
}

6.32.4 関連メッセージ

なし。

6.32.5 対応バージョン

1.0.0


Next: , Previous: W0031, Up: Messages

6.33 W0033

6.33.1 メッセージ本文

ラベル `%s:' は、この関数の中で使われていないため、削除することができます。

6.33.2 内容

使用されないラベルは無駄な要素といえます。コード中に無駄な要素があることで解析性が低下します。

6.33.3 サンプルコード

void func(void)
{
    int num = 0;
    for (int i =0; i < 10; i++) {
        num++;
    }
ERROR: /* W0033 */
    num = 0;
}

6.33.4 関連メッセージ

なし。

6.33.5 対応バージョン

1.0.0


Next: , Previous: W0033, Up: Messages

6.34 W0035

6.34.1 メッセージ本文

`&&' または `||' の右のオペランドは、算術型またはポインタ型でなければなりません。

6.34.2 内容

ISO C90 では && や || の右辺はスカラ型でなければならないとされています。 従って構造体型にした場合の動作は未定義なので、予期しない動作を引き起こす可能性があります。

6.34.3 サンプルコード

struct STR {
    int x;
    int y;
};

extern struct STR str;

void func(void)
{
    int x;
    int y;
    x = y && str; /* W0035 */
}

6.34.4 関連メッセージ

なし。

6.34.5 対応バージョン

1.0.0


Next: , Previous: W0035, Up: Messages

6.35 W0036

6.35.1 メッセージ本文

宣言子の中の修飾子の数が 12 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.35.2 内容

ISO C90 では宣言子の修飾子数の制限を 12 と定めています。この制限を超えると移植性が低下します。

6.35.3 サンプルコード

int num[1][2][3][4][5][6][7][8][9][10][11][12][13]; /* W0036 */

6.35.4 関連メッセージ

なし。

6.35.5 対応バージョン

1.0.0


Next: , Previous: W0036, Up: Messages

6.36 W0037

6.36.1 メッセージ本文

構造体または共用体のネストが 15 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.36.2 内容

ISO C90 では構造体や共用体のネスト数の制限を 15 と定めています。この制限を超えると移植性が低下します。

6.36.3 サンプルコード

struct st1 {
  struct st2 {
    struct st3 {
      struct st4 {
        struct st5 {
          struct st6 {
            struct st7 {
              struct st8 {
                struct st9 {
                  struct st10 {
                    struct st11 {
                      struct st12 {
                        struct st13 {
                          struct st14 {
                            struct st15 {
                              struct st16 { /* W0037 */
                                int i;
                              } st16;
                            } st15;
                          } st14;
                        } st13;
                      } st12;
                    } st11;
                  } st10;
                } st9;
              } st8;
            } st7;
          } st6;
        } st5;
      } st5;
    } st3;
  } st2;
};

6.36.4 関連メッセージ

なし。

6.36.5 対応バージョン

1.0.0


Next: , Previous: W0037, Up: Messages

6.37 W0038

6.37.1 メッセージ本文

オブジェクト `%s' のサイズが 32767 バイトを超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.37.2 内容

ISO C90 ではオブジェクトのサイズ制限を 32767 バイトと定めています。この制限を超えると移植性が低下します。

6.37.3 サンプルコード

int num[100][330]; /* W0038 */

6.37.4 関連メッセージ

なし。

6.37.5 対応バージョン

1.0.0


Next: , Previous: W0038, Up: Messages

6.38 W0039

6.38.1 メッセージ本文

ブロックの中のローカルな識別子の数が 127 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.38.2 内容

ISO C90 ではブロックスコープ識別子を持つブロック数の制限を 127 個と定めています。この制限を超えると移植性が低下します。

6.38.3 サンプルコード

void func(void)
{
    int num1,  num2,  num3,  num4,  num5,  num6,  num7,  num8,  num9,  num10;
    int num11, num12, num13, num14, num15, num16, num17, num18, num19, num20;

    ...snip...

    int num111, num112, num113, num114, num115, num116, num117, num118, num119, num120;
    int num121, num122, num123, num124, num125, num126, num127, num128; /* W0039 */
}

6.38.4 関連メッセージ

なし。

6.38.5 対応バージョン

1.0.0


Next: , Previous: W0039, Up: Messages

6.39 W0040

6.39.1 メッセージ本文

ビットフィールドが signed または unsigned 付きで宣言されていません。

6.39.2 内容

単なる int 型でビットフィールドを定義した場合、signed int になるか unsigned int になるかは処理系依存になります。 従って、プログラマが意図しない型になる可能性があります。

6.39.3 サンプルコード

struct STR { /* W0040 */
    int a:5;
};

6.39.4 関連メッセージ

なし。

6.39.5 対応バージョン

1.0.0


Next: , Previous: W0040, Up: Messages

6.40 W0041

6.40.1 メッセージ本文

構造体または共用体のメンバの数が 127 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.40.2 内容

ISO C90 では構造体や共用体のメンバ数の制限を 127 と定めています。この制限を超えると移植性が低下します。

6.40.3 サンプルコード

struct STR {
    int num1;
    int num2;
    int num3;
    int num4;
    int num5;

    ...snip...

    int num125;
    int num126;
    int num127;
    int num128; /* W0041 */
};

6.40.4 関連メッセージ

なし。

6.40.5 対応バージョン

1.0.0


Next: , Previous: W0041, Up: Messages

6.41 W0042

6.41.1 メッセージ本文

列挙定数の数が 127 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.41.2 内容

ISO C90 では列挙定数の制限を 127 と定めています。この制限を超えると移植性が低下します。

6.41.3 サンプルコード

enum ENM {
    e1,  e2,  e3,  e4,  e5,  e6,  e7,  e8,  e9,  e10,
    e11, e12, e13, e14, e15, e16, e17, e18, e19, e20,

    ...snip...

    e111, e112, e113, e114, e115, e116, e117, e118, e119, e120,
    e121, e122, e123, e124, e125, e126, e127, e128 /* W0042 */
};

6.41.4 関連メッセージ

なし。

6.41.5 対応バージョン

1.0.0


Next: , Previous: W0042, Up: Messages

6.42 W0043

6.42.1 メッセージ本文

配列の初期値が、宣言された配列のサイズに足りません。残りの配列要素はゼロで初期化されます。

6.42.2 内容

初期化子が不足する場合は 0 で初期化されますが、意図したものか、そうでないかが分かりづらくなります。 初期化子を指定する場合には、要素数と初期値の数を一致させることが望ましいです。

6.42.3 サンプルコード

int array[5] = { 1, 2, 3 }; /* W0043 */

6.42.4 関連メッセージ

なし。

6.42.5 対応バージョン

1.0.0


Next: , Previous: W0043, Up: Messages

6.43 W0049

6.43.1 メッセージ本文

制御構造のネストが 15 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.43.2 内容

ISO C90 では制御構造のネスト数の制限を 15 と定めています。この制限を超えると移植性が低下します。

6.43.3 サンプルコード

if(x > 0) {
  if(x > 0) {
    if(x > 0) {
      if(x > 0) {
        if(x > 0) {
          if(x > 0) {
            if(x > 0) {
              if(x > 0) {
                if(x > 0) {
                  if(x > 0) {
                    if(x > 0) {
                      if(x > 0) {
                        if(x > 0) {
                          if(x > 0) {
                            if (x > 0) {
                              if(x > 0) { /* W0049 */
                                ;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

6.43.4 関連メッセージ

なし。

6.43.5 対応バージョン

1.0.0


Next: , Previous: W0049, Up: Messages

6.44 W0050

6.44.1 メッセージ本文

case ラベルの数が 257 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.44.2 内容

ISO C90 では case ラベルの制限を 257 と定めています。この制限を超えると移植性が低下します。

6.44.3 サンプルコード

switch (num) {
case 1:
    break;
case 2:
    break;
case 3:
    break;

  ...snip...

case 257:
    break;
case 258: /* W0050 */
    break;
}

6.44.4 関連メッセージ

なし。

6.44.5 対応バージョン

1.0.0


Next: , Previous: W0050, Up: Messages

6.45 W0051

6.45.1 メッセージ本文

外部識別子 `%s' が他の識別子名と、リンカ特性で指定された文字数の範囲内で区別できません。

6.45.2 内容

処理系で決められている文字数の制限を超えた場合の動作は未定義なので、予期しない動作を引き起こす可能性があります。

6.45.3 サンプルコード

extern int very_long_long_long_ ...snip... _long_external_symbol; /* W0051 */

6.45.4 関連メッセージ

6.45.5 対応バージョン

1.0.0


Next: , Previous: W0051, Up: Messages

6.46 W0052

6.46.1 メッセージ本文

識別子名 `%s' が他の識別子名と、コンパイラ特性で指定された文字数の範囲内で区別できません。

6.46.2 内容

処理系で決められている文字数の制限(原則 31 文字)を超えた場合の動作は未定義なので、予期しない動作を引き起こす可能性があります。

6.46.3 サンプルコード

void func(void)
{
    int very_long_long_long_long_long_ ...snip... _long_symbol; /* W0052 */
}

6.46.4 関連メッセージ

6.46.5 対応バージョン

1.0.0


Next: , Previous: W0052, Up: Messages

6.47 W0053

6.47.1 メッセージ本文

`#include "%s"' のネストが 8 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.47.2 内容

ISO C90 では include の入れ子レベルの制限を 8 と定めています。この制限を超えると移植性が低下します。

6.47.3 サンプルコード

test.c

#include "test1.h"

test1.h

#include "test2.h"

test2.h

#include "test3.h"

test3.h

#include "test4.h"

test4.h

#include "test5.h"

test5.h

#include "test6.h"

test6.h

#include "test7.h"

test7.h

#include "test8.h"

test8.h

#include "test9.h"

test9.h

#include "test10.h" /* W0053 */

6.47.4 関連メッセージ

なし。

6.47.5 対応バージョン

1.0.0


Next: , Previous: W0053, Up: Messages

6.48 W0054

6.48.1 メッセージ本文

`#if...' のネストの最大値が 8 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.48.2 内容

ISO C90 では #if の入れ子レベルの制限を 8 と定めています。この制限を超えると移植性が低下します。

6.48.3 サンプルコード

#if N > 1
#if N > 2
#if N > 3
#if N > 4
#if N > 5
#if N > 6
#if N > 7
#if N > 8 /* W0054 */
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif

6.48.4 関連メッセージ

なし。

6.48.5 対応バージョン

1.0.0


Next: , Previous: W0054, Up: Messages

6.49 W0055

6.49.1 メッセージ本文

マクロ定義の数が 1024 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.49.2 内容

ISO C90 では一つの翻訳単位中で定義できるマクロの制限を 1024 と定めています。この制限を超えると移植性が低下します。

6.49.3 サンプルコード

#define MACRO_1
#define MACRO_2
#define MACRO_3

...snip...

#define MACRO_1023
#define MACRO_1024
#define MACRO_1025 /* W0055 */

6.49.4 関連メッセージ

なし。

6.49.5 対応バージョン

1.0.0


Next: , Previous: W0055, Up: Messages

6.50 W0056

6.50.1 メッセージ本文

関数形式マクロの仮引数の数が 31 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.50.2 内容

ISO C90 ではマクロ引数数の制限を 31 と定めています。この制限を超えると移植性が低下します。

6.50.3 サンプルコード

#define MACRO(a1, a2, a3, ...snip... a30, a31, a32) /* W0056 */

6.50.4 関連メッセージ

なし。

6.50.5 対応バージョン

1.0.0


Next: , Previous: W0056, Up: Messages

6.51 W0057

6.51.1 メッセージ本文

関数形式マクロの呼び出しの実引数の数が 31 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.51.2 内容

ISO C90 ではマクロ呼び出しの引数数の制限を 31 と定めています。この制限を超えると移植性が低下します。

6.51.3 サンプルコード

int i = MACRO(1, 2, 3 ...snip... 30, 31, 32); /* W0057 */

6.51.4 関連メッセージ

なし。

6.51.5 対応バージョン

1.0.0


Next: , Previous: W0057, Up: Messages

6.52 W0058

6.52.1 メッセージ本文

文字列リテラルの文字数が 509 を超えました。このプログラムは ISO C90 標準規格に厳密に準拠していません。

6.52.2 内容

ISO C90 では文字列リテラルの文字数の制限を 509 と定めています。この制限を超えると移植性が低下します。

6.52.3 サンプルコード

char buf[] = "very long long long ...snip... long string literal"; /* W0058 */

6.52.4 関連メッセージ

なし。

6.52.5 対応バージョン

1.0.0


Next: , Previous: W0058, Up: Messages

6.53 W0059

6.53.1 メッセージ本文

このファイルの行末に Ctrl-M(^M) 制御文字が見つかりました。

6.53.2 内容

PC で作成したソースには機種依存の制御コードが使用されることがあります。 このような制御コードを無視せず、意図しない処理をする処理系が存在する可能性があります。 従ってこのような機種依存の記述は移植性を低下させます。

6.53.3 サンプルコード

なし。

6.53.4 関連メッセージ

6.53.5 対応バージョン

1.0.0


Next: , Previous: W0059, Up: Messages

6.54 W0060

6.54.1 メッセージ本文

このファイル内に Ctrl-Z(^Z) 制御文字が見つかりました。

6.54.2 内容

PC で作成したソースには機種依存の制御コードが使用されることがあります。 このような制御コードを無視せず、意図しない処理をしてしまう処理系が存在する可能性があります。 従ってこのような機種依存の記述は移植性を低下させます。

6.54.3 サンプルコード

なし。

6.54.4 関連メッセージ

6.54.5 対応バージョン

1.0.0


Next: , Previous: W0060, Up: Messages

6.55 W0061

6.55.1 メッセージ本文

`%s' は ISO C 標準規格の正式な予約語ではありません。言語拡張と見なし無視します。

6.55.2 内容

ある特定のコンパイラで定義されている言語拡張を使用すると移植性が低下します。

6.55.3 サンプルコード

extern int func(void) __attribute__ ((__const__)); /* W0061 */

6.55.4 関連メッセージ

6.55.5 対応バージョン

1.0.0


Next: , Previous: W0061, Up: Messages

6.56 W0062

6.56.1 メッセージ本文

`__typeof__' は ISO C 標準規格ではサポートされていません。言語拡張と見なします。

6.56.2 内容

ある特定のコンパイラで定義されている言語拡張を使用すると移植性が低下します。

6.56.3 サンプルコード

#define DEF_FUNPTR(func) __typeof__(func) *ptr_##func = 0
DEF_FUNPTR(main); /* W0062 */

6.56.4 関連メッセージ

6.56.5 対応バージョン

1.0.0


Next: , Previous: W0062, Up: Messages

6.57 W0063

6.57.1 メッセージ本文

`__alignof__' は ISO C 標準規格ではサポートされていません。言語拡張と見なします。

6.57.2 内容

ある特定のコンパイラで定義されている言語拡張を使用すると移植性が低下します。

6.57.3 サンプルコード

int a = __alignof__(struct sockaddr *) /* W0063 */

6.57.4 関連メッセージ

6.57.5 対応バージョン

1.0.0


Next: , Previous: W0063, Up: Messages

6.58 W0064

6.58.1 メッセージ本文

2 進数整数リテラルが使われています。これは言語拡張です。

6.58.2 内容

2 進数定数が認められている場合、それは言語拡張と考えられます。言語拡張を使用すると移植性が低下します。

6.58.3 サンプルコード

unsigned char c = 0b00000001; /* W0064 */

6.58.4 関連メッセージ

なし。

6.58.5 対応バージョン

1.0.0


Next: , Previous: W0064, Up: Messages

6.59 W0065

6.59.1 メッセージ本文

代入演算子の左オペランドをキャストしてはなりません。

6.59.2 内容

左オペランドに対するキャストが認められている場合、それは言語拡張と考えられます。 言語拡張を使用すると移植性が低下します。

6.59.3 サンプルコード

void func(int num)
{
    (unsigned short) num = 100U; /* W0065 */
}

6.59.4 関連メッセージ

なし。

6.59.5 対応バージョン

1.0.0


Next: , Previous: W0065, Up: Messages

6.60 W0066

6.60.1 メッセージ本文

`main()' 関数は、`int (void)' または `int (int, char *[])' のどちらかでなければなりません。

6.60.2 内容

int main(void) または int main(int, char*[]) 以外の形式の main 関数の定義が認められている場合、それは言語拡張と考えられます。

6.60.3 サンプルコード

void main(void) {} /* W0066 */

6.60.4 関連メッセージ

なし。

6.60.5 対応バージョン

1.0.0


Next: , Previous: W0066, Up: Messages

6.61 W0067

6.61.1 メッセージ本文

ネストされた構造体のメンバに直接アクセスしています。これは言語拡張です。

6.61.2 内容

入れ子の構造体への直接アクセスや特定ビットへの直接アクセスが認められている場合、 それは言語拡張と考えられます。言語拡張を使用すると移植性が低下します。

6.61.3 サンプルコード

struct BBB {
    int mb;
    struct AAA {
        int ma;
    };
} bbb;

bbb.ma = 1; /* W0067 */

6.61.4 関連メッセージ

6.61.5 対応バージョン

1.0.0


Next: , Previous: W0067, Up: Messages

6.62 W0068

6.62.1 メッセージ本文

ビットにアクセスするために `.' を使っています。これは言語拡張です。

6.62.2 内容

入れ子の構造体への直接アクセスや特定ビットへの直接アクセスが認められている場合、 それは言語拡張と考えられます。言語拡張を使用すると移植性が低下します。

6.62.3 サンプルコード

unsigned short a;

a.2 = 0; /* W0068 */

6.62.4 関連メッセージ

6.62.5 対応バージョン

1.0.0


Next: , Previous: W0068, Up: Messages

6.63 W0069

6.63.1 メッセージ本文

`/*' で始まるコメントの中に `/*' が見つかりました。ネストされたコメントは、ISO C 標準規格では認められていません。

6.63.2 内容

/* コメントの入れ子は ISO C90 では認められていません。 入れ子によって即問題に直結するわけではありませんが、 内側のコメントの終端 */ によって外側のコメントが終了してしまうことで 予期しない動作を引き起こす可能性があります。

6.63.3 サンプルコード

/* /* W0069 */ */

6.63.4 関連メッセージ

なし。

6.63.5 対応バージョン

1.0.0


Next: , Previous: W0069, Up: Messages

6.64 W0070

6.64.1 メッセージ本文

インクルードされている <%s> の内容は翻訳単位の中で全く参照されていません。削除することができます。

6.64.2 内容

参照しないヘッダファイルをインクルードすることは無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.64.3 サンプルコード

なし。

6.64.4 関連メッセージ

6.64.5 対応バージョン

1.0.0


Next: , Previous: W0070, Up: Messages

6.65 W0071

6.65.1 メッセージ本文

インクルードされている "%s" の内容は翻訳単位の中で全く参照されていません。削除することができます。

6.65.2 内容

参照しないヘッダファイルをインクルードすることは無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.65.3 サンプルコード

なし。

6.65.4 関連メッセージ

6.65.5 対応バージョン

1.0.0


Next: , Previous: W0071, Up: Messages

6.66 W0072

6.66.1 メッセージ本文

基本ソース文字集合に含まれない文字が、ヘッダファイル名で使われています。

6.66.2 内容

ISO C90 では処理できる最小限の文字集合を定めています。この集合に当てはまらない文字を処理する場合は処理系定義の動作となります。 処理系定義の動作を使用すると移植性が低下します。

6.66.3 サンプルコード

#include <test$.h> /* W0072 */

6.66.4 関連メッセージ

なし。

6.66.5 対応バージョン

1.0.0


Next: , Previous: W0072, Up: Messages

6.67 W0073

6.67.1 メッセージ本文

このインクルードファイルには、インクルードガードが記述されていません。

6.67.2 内容

重複インクルードは型の再定義に関するエラーを引き起こす原因になります。

6.67.3 サンプルコード

なし。

6.67.4 関連メッセージ

なし。

6.67.5 対応バージョン

1.0.0


Next: , Previous: W0073, Up: Messages

6.68 W0076

6.68.1 メッセージ本文

この 16 進整数リテラルには、接尾語 `U' または `u' が付けられていません。

6.68.2 内容

整数定数の値は、規格で指定された型のうち、その値を表現できる最初の型になります。 つまり、接尾語 "U" を使用していない 16 進定数は、 unsigned を意図していても、signed 型で表現できる場合は signed となります。 例えば、0x8000 は、int の実装サイズが 16bit の場合 unsigned int になりますが、 int の実装サイズが 32bit の場合 signed int 型になります。 このように、16 進定数に接尾語 "U" を使用していない時、 signed と unsigned のどちらになるのかが判断しづらくなります。

6.68.3 サンプルコード

unsigned int num = 0x1234; /* W0076 */

6.68.4 関連メッセージ

なし。

6.68.5 対応バージョン

1.0.0


Next: , Previous: W0076, Up: Messages

6.69 W0077

6.69.1 メッセージ本文

接尾語として小文字の `l' が整数または浮動小数点数に付けられています。

6.69.2 内容

long 型を表す接尾語 "l" の使用は、数字の "1" と間違えられやすいため解析性が低下します。

6.69.3 サンプルコード

long a = 0x1000l; /* W0077 */
long b = 0x1000L; /* OK */

6.69.4 関連メッセージ

なし。

6.69.5 対応バージョン

1.0.0


Next: , Previous: W0077, Up: Messages

6.70 W0078

6.70.1 メッセージ本文

仮引数並びがない関数が宣言されています。

6.70.2 内容

仮引数の並びが空の関数宣言は旧式 (K&R) の文法であり、 これが現在でも利用できるのはコンパイラが旧式の文法の一部をサポートしているためです。 このようなコンパイラの配慮に依存したコードは将来的に変更を余儀なくされる未成熟なコードといえます。

6.70.3 サンプルコード

int sample() /* W0078 */
{
    return 0;
}

6.70.4 関連メッセージ

なし。

6.70.5 対応バージョン

1.0.0


Next: , Previous: W0078, Up: Messages

6.71 W0079

6.71.1 メッセージ本文

この配列は、初期値の文字列リテラルの終端文字 `\0' を保持できません。

6.71.2 内容

文字列配列はターミネータとして終端にヌル文字が入っていることを想定して使用される場合が多くあります。 例えば、文字数を数えるために終端のヌル文字が見つかるまで反復処理するような使用法が挙げられます。 このような処理を、ヌル文字を保持していない文字列配列に行った場合、無限ループに陥ってしまいます。

6.71.3 サンプルコード

char text[3] = "ABC"; /* W0079 */

6.71.4 関連メッセージ

なし。

6.71.5 対応バージョン

1.0.0


Next: , Previous: W0079, Up: Messages

6.72 W0080

6.72.1 メッセージ本文

const 修飾されたグローバルオブジェクトが、明示的に初期化されずに定義されています。

6.72.2 内容

const 指定されている変数は、値を代入することができませんので、宣言時に初期化する必要があります。 従って、const 指定されており、宣言時に初期化されていない変数は使いようのない無駄なデータということになります。 無駄なものは、メモリ資源を消費する、ソースコードの可読性を低下させる、などのデメリットがあります。

6.72.3 サンプルコード

const int num; /* W0080 */

6.72.4 関連メッセージ

なし。

6.72.5 対応バージョン

1.0.0


Next: , Previous: W0080, Up: Messages

6.73 W0081

6.73.1 メッセージ本文

単項演算子 `-' を unsigned int 型、unsigned long 型、unsigned long long 型のオペランドに対して使うと、符号無し型になってしまいます。

6.73.2 内容

符号なし型の変数に、単項演算子 "-" を使用すると結果は処理系定義、または未定義の動作になります。 従って、予期しない動作を引き起こす可能性があります。

6.73.3 サンプルコード

unsigned long num = 0;
long val = -num; /* W0081 */

6.73.4 関連メッセージ

なし。

6.73.5 対応バージョン

1.0.0


Next: , Previous: W0081, Up: Messages

6.74 W0082

6.74.1 メッセージ本文

単項演算子 `-' を符号無しの潜在型 `%s' のオペランドに対して使っています。

6.74.2 内容

符号なし型の変数に、単項演算子 "-" を使用すると結果は処理系定義、または未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.74.3 サンプルコード

unsigned short num = 20;
int val = -num; /* W0082 */

6.74.4 関連メッセージ

なし。

6.74.5 対応バージョン

1.0.0


Next: , Previous: W0082, Up: Messages

6.75 W0084

6.75.1 メッセージ本文

このカンマ演算子 `,' の左オペランドには副作用をもつ式が記述されていません。

6.75.2 内容

副作用がない文は無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.75.3 サンプルコード

int a = 0;
int b = 1;

a, b++; /* W0084 */

6.75.4 関連メッセージ

6.75.5 対応バージョン

1.0.0


Next: , Previous: W0084, Up: Messages

6.76 W0085

6.76.1 メッセージ本文

この文には副作用がありません。誤りのある可能性が高いです。

6.76.2 内容

副作用がない文は無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.76.3 サンプルコード

a; /* W0085 */

6.76.4 関連メッセージ

6.76.5 対応バージョン

1.0.0


Next: , Previous: W0085, Up: Messages

6.77 W0086

6.77.1 メッセージ本文

三項演算子(条件演算子)の中で、2 番目あるいは 3 番目のオペランドは、副作用がない冗長な式です。

6.77.2 内容

副作用がない文は無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.77.3 サンプルコード

int a;
int b;

(a < 0) ? b : b++; /* W0086 */

6.77.4 関連メッセージ

6.77.5 対応バージョン

1.0.0


Next: , Previous: W0086, Up: Messages

6.78 W0087

6.78.1 メッセージ本文

カンマ演算子の右側の式は、副作用がない冗長な式です。

6.78.2 内容

副作用がない文は無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.78.3 サンプルコード

int a = 0;
int b = 1;

a++, b; /* W0087 */

6.78.4 関連メッセージ

6.78.5 対応バージョン

1.0.0


Next: , Previous: W0087, Up: Messages

6.79 W0088

6.79.1 メッセージ本文

論理演算子の右側の式は、副作用がない冗長な式です。

6.79.2 内容

副作用がない文は無駄な文だと言えます。コード中に無駄な文があることで解析性が低下します。

6.79.3 サンプルコード

(a < 0) && func(a) && func(b) && c; /* W0088 */

6.79.4 関連メッセージ

6.79.5 対応バージョン

1.0.0


Next: , Previous: W0088, Up: Messages

6.80 W0093

6.80.1 メッセージ本文

ゼロで除算される恐れがあります。

6.80.2 内容

ゼロでの除算は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.80.3 サンプルコード

int func(int a, int b)
{
    if (b > 0) {
        return a / b; /* OK */
    }
    return a / b; /* W0093 */
}

6.80.4 関連メッセージ

6.80.5 対応バージョン

1.0.0


Next: , Previous: W0093, Up: Messages

6.81 W0096

6.81.1 メッセージ本文

ゼロになる定数式で除算しています。

6.81.2 内容

ゼロでの除算は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.81.3 サンプルコード

#define A (0)

int b = 10 / A; /* W0096 */

6.81.4 関連メッセージ

6.81.5 対応バージョン

1.0.0


Next: , Previous: W0096, Up: Messages

6.82 W0097

6.82.1 メッセージ本文

ゼロの値で除算しています。

6.82.2 内容

ゼロでの除算は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.82.3 サンプルコード

int func(int a, int b)
{
    if (a < 0) {
        ...snip...
    }
    else {
        ...snip...
        if (a < 1) {
            return b / a; /* W0097 */
        }
    }
}

6.82.4 関連メッセージ

6.82.5 対応バージョン

1.0.0


Next: , Previous: W0097, Up: Messages

6.83 W0100

6.83.1 メッセージ本文

変数 `%s' は初期値を設定後に再代入されません。変数を const 付きで初期値を指定して定義できる可能性があります。

6.83.2 内容

このような変数は、値を変更しても良いか否かがわかりづらいといった問題があります。

6.83.3 サンプルコード

int func(int a)
{
    int b = a; /* W0100 */
    return b;
}

6.83.4 関連メッセージ

なし。

6.83.5 対応バージョン

1.0.0


Next: , Previous: W0100, Up: Messages

6.84 W0101

6.84.1 メッセージ本文

自動変数のアドレスが、より長い寿命を持つポインタに代入されています。このプログラムは危険です。

6.84.2 内容

ある関数で宣言された自動変数のスコープはその関数内に限定されますが、 その自動変数のアドレスをより大きなスコープを持つポインタに代入して使用した場合、 あたかもそのポインタが有効なスコープで自動変数のアドレスを扱うようなソースコードになります。 しかし実際は、関数内で宣言された自動変数は、その関数を抜けた時点でスコープを外れるため、 その自動変数のポインタも無効になります。 従って、自動変数のポインタをより大きいスコープを持つポインタへ代入することは、 無効なポインタを意図しないタイミングで使う可能性を生じさせるため危険です。

6.84.3 サンプルコード

extern long *ptr;

void func()
{
    long value = 0;
    ptr = &value; /* W0101 */
}

6.84.4 関連メッセージ

なし。

6.84.5 対応バージョン

1.0.0


Next: , Previous: W0101, Up: Messages

6.85 W0102

6.85.1 メッセージ本文

自動変数のアドレスが、関数の仮引数を介して戻されています。このプログラムは危険です。

6.85.2 内容

関数内で宣言された自動変数は、関数の実行が終了した時点で無効になります。 そのような変数のアドレスは、いつ別の変数のメモリ領域として使用されるかわかりません。

6.85.3 サンプルコード

void func(int **ptr)
{
    int num;
    *ptr = &num; /* W0102 */
}

6.85.4 関連メッセージ

6.85.5 対応バージョン

1.0.0


Next: , Previous: W0102, Up: Messages

6.86 W0103

6.86.1 メッセージ本文

自動変数のアドレスが、戻り値として関数から返されています。このプログラムは危険です。

6.86.2 内容

関数内で宣言された自動変数は、関数の実行が終了した時点で無効になります。 そのような変数のアドレスは、いつ別の変数のメモリ領域として使用されるかわかりません。

6.86.3 サンプルコード

char *foo1(void)
{
    char a[3];
    return a; /* W0103 */
}

6.86.4 関連メッセージ

6.86.5 対応バージョン

1.0.0


Next: , Previous: W0103, Up: Messages

6.87 W0104

6.87.1 メッセージ本文

仮引数 `%s' は値が変わりません。const 付きで宣言できる可能性があります。

6.87.2 内容

このような引数は、値を変更しても良いか否かがわかりづらいといった問題があります。

6.87.3 サンプルコード

void func(int val) /* W0104 */
{
    const int num = val + 1;
}

6.87.4 関連メッセージ

6.87.5 対応バージョン

1.0.0


Next: , Previous: W0104, Up: Messages

6.88 W0105

6.88.1 メッセージ本文

ポインタ仮引数 `%s' が指しているオブジェクトは関数内で変わらないので、const オブジェクトを指すポインタ型として宣言できる可能性があります。

6.88.2 内容

このような引数は、値を変更しても良いか否かがわかりづらいといった問題があります。

6.88.3 サンプルコード

void func(int *val) /* W0105 */
{
    const int num = *val;
}

6.88.4 関連メッセージ

6.88.5 対応バージョン

1.0.0


Next: , Previous: W0105, Up: Messages

6.89 W0107

6.89.1 メッセージ本文

自動変数のアドレスが、static 付きローカルポインタに代入されています。このプログラムは危険です。

6.89.2 内容

関数のスコープを抜けると自動記憶域期間を持つオブジェクトが無効になる一方で、 静的記憶域期間を持つオブジェクトは無効になりません。 従って、静的記憶域期間を持つポインタに自動記憶域期間を持つオブジェクトのアドレスを代入することは危険です。

6.89.3 サンプルコード

void foo()
{
    static int *p;
    int b = 100;

    p = &b; /* W0107 */
}

6.89.4 関連メッセージ

なし。

6.89.5 対応バージョン

1.0.0


Next: , Previous: W0107, Up: Messages

6.90 W0108

6.90.1 メッセージ本文

代入演算子が論理演算式の中で使われています。

6.90.2 内容

実質的にブール型として使用されている変数に対する代入演算子や複合代入演算子の使用は、 どのように解釈してよいかがわかりづらく、コードを複雑にします。

6.90.3 サンプルコード

int a;
int b;

if (a = b) { /* W0108 */
}

6.90.4 関連メッセージ

なし。

6.90.5 対応バージョン

1.0.0


Next: , Previous: W0108, Up: Messages

6.91 W0109

6.91.1 メッセージ本文

この関数の宣言が見つかりません。省略されたものとみなし、`extern int %s()' を挿入します。

6.91.2 内容

ISO C90 では、関数は使用される前に定義もしくはプロトタイプ宣言すべきとされています。 定義もしくはプロトタイプ宣言なしで使用する場合は、暗黙の宣言があるものと見なされます。 しかし、このような規格の配慮に依存したコードは将来的に変更を余儀なくされる未成熟なコードといえます。

6.91.3 サンプルコード

void func()
{
    foo(); /* W0109 */
}

6.91.4 関連メッセージ

なし。

6.91.5 対応バージョン

1.0.0


Next: , Previous: W0109, Up: Messages

6.92 W0110

6.92.1 メッセージ本文

浮動小数点型の変数が for 文のループカウンタとして使われています。

6.92.2 内容

ループカウンタ(ループの制御変数)の型を浮動小数点型にした場合、 ループを抜ける条件に等式や不等式を採用した場合に、 ループカウンタの丸め誤差が原因で無限ループになる可能性が高くなります。

6.92.3 サンプルコード

double d;

for (d = 0.0; d != 1.0; d += 0.1) { /* W0110 */
}

6.92.4 関連メッセージ

なし。

6.92.5 対応バージョン

1.0.0


Next: , Previous: W0110, Up: Messages

6.93 W0112

6.93.1 メッセージ本文

浮動小数点の式を等価演算子で比較しています。

6.93.2 内容

浮動小数点型の変数は様々な誤差の影響により、ある数と等式や不等式で比較しても目的の結果を得られるとは限りません。

6.93.3 サンプルコード

double a = 0.1;
a = (a + 0.1) * 5.0;
if (a == 1.0) { /* W0112 */
}

6.93.4 関連メッセージ

なし。

6.93.5 対応バージョン

1.0.0


Next: , Previous: W0112, Up: Messages

6.94 W0114

6.94.1 メッセージ本文

この制御式は明示的な論理演算ではありません。

6.94.2 内容

制御式で比較演算子を使用しないと暗黙的に 0 と比較された結果を判定することになります。 このような比較演算子を用いない書き方はコーディング量が減るメリットよりも解析性が低下するデメリットの方が大きいと考えられます。

6.94.3 サンプルコード

int a;

if (a != 0) { /* OK */
}

if (a) { /* W0114 */
}

6.94.4 関連メッセージ

なし。

6.94.5 対応バージョン

1.0.0


Next: , Previous: W0114, Up: Messages

6.95 W0115

6.95.1 メッセージ本文

符号無し左シフト演算 `<<' は、上位ビットを切り捨てます。

6.95.2 内容

符号なし型の変数に対する左シフト演算は上位ビットを切り詰めて、情報を損失する可能性があります。

6.95.3 サンプルコード

unsigned int func(unsigned int a)
{
    if (a > 0x40000000U) {
        return a << 2; /* W0115 */
    }
}

6.95.4 関連メッセージ

6.95.5 対応バージョン

1.0.0


Next: , Previous: W0115, Up: Messages

6.96 W0116

6.96.1 メッセージ本文

符号無し左シフト演算 `<<' は、上位ビットを切り捨てる恐れがあります。

6.96.2 内容

符号なし型の変数に対する左シフト演算は上位ビットを切り詰めて、情報を損失する可能性があります。

6.96.3 サンプルコード

unsigned int func(unsigned int a)
{
    if (a > 0x40000000U) {
        return a << 1; /* W0116 */
    }
}

6.96.4 関連メッセージ

6.96.5 対応バージョン

1.0.0


Next: , Previous: W0116, Up: Messages

6.97 W0117

6.97.1 メッセージ本文

`%s' の定義は外部結合を持ちますが、定義より前にその宣言がありません。

6.97.2 内容

外部変数や外部関数は複数のファイルで使用されることを想定して宣言されます。 従って、これらはヘッダファイルで宣言され、インクルードして使用されるべきです。 ソースファイルで宣言して使用する場合、ヘッダファイルで宣言して使用するよりも安全性、保守性が低下します。

6.97.3 サンプルコード

void func(void) /* W0117 */
{
    ...snip...
}

6.97.4 関連メッセージ

6.97.5 対応バージョン

1.0.0


Next: , Previous: W0117, Up: Messages

6.98 W0118

6.98.1 メッセージ本文

外部結合を持つ `%s' の宣言が、ヘッダファイルの中にありません。

6.98.2 内容

外部変数や外部関数は複数のファイルで使用されることを想定して宣言されます。 従って、これらはヘッダファイルで宣言され、インクルードして使用されるべきです。 ソースファイルで宣言して使用する場合、ヘッダファイルで宣言して使用するよりも安全性、保守性が低下します。

6.98.3 サンプルコード

test.c

extern int val; /* W0118 */

6.98.4 関連メッセージ

6.98.5 対応バージョン

1.0.0


Next: , Previous: W0118, Up: Messages

6.99 W0119

6.99.1 メッセージ本文

暗黙的に char 型から signed char 型に型変換されています。

6.99.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.99.3 サンプルコード

extern void foo(signed char a);

void bar(char a)
{
    signed char b = a; /* W0119 */
    foo(a); /* W0119 */
}

6.99.4 関連メッセージ

6.99.5 対応バージョン

1.0.0


Next: , Previous: W0119, Up: Messages

6.100 W0120

6.100.1 メッセージ本文

暗黙的に char 型から unsigned char 型に型変換されています。

6.100.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.100.3 サンプルコード

extern void foo(unsigned char a);

void bar(char a)
{
    unsigned char b = a; /* W0120 */
    foo(a); /* W0120 */
}

6.100.4 関連メッセージ

6.100.5 対応バージョン

1.0.0


Next: , Previous: W0120, Up: Messages

6.101 W0121

6.101.1 メッセージ本文

暗黙的に char 型から signed short 型に型変換されています。

6.101.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.101.3 サンプルコード

extern void foo(short a);

void bar(char a)
{
    short b = a; /* W0121 */
    foo(a); /* W0121 */
}

6.101.4 関連メッセージ

6.101.5 対応バージョン

1.0.0


Next: , Previous: W0121, Up: Messages

6.102 W0122

6.102.1 メッセージ本文

暗黙的に char 型から unsigned short 型に型変換されています。

6.102.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.102.3 サンプルコード

extern void foo(unsigned short a);

void bar(char a)
{
    unsigned short b = a; /* W0122 */
    foo(a); /* W0122 */
}

6.102.4 関連メッセージ

6.102.5 対応バージョン

1.0.0


Next: , Previous: W0122, Up: Messages

6.103 W0123

6.103.1 メッセージ本文

暗黙的に char 型から signed int 型に型変換されています。

6.103.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.103.3 サンプルコード

extern void foo(int a);

void bar(char a)
{
    int b = a; /* W0123 */
    foo(a); /* W0123 */
}

6.103.4 関連メッセージ

6.103.5 対応バージョン

1.0.0


Next: , Previous: W0123, Up: Messages

6.104 W0124

6.104.1 メッセージ本文

暗黙的に char 型から unsigned int 型に型変換されています。

6.104.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.104.3 サンプルコード

extern void foo(unsigned int a);

void bar(char a)
{
    unsigned int b = a; /* W0124 */
    foo(a); /* W0124 */
}

6.104.4 関連メッセージ

6.104.5 対応バージョン

1.0.0


Next: , Previous: W0124, Up: Messages

6.105 W0125

6.105.1 メッセージ本文

暗黙的に char 型から signed long 型に型変換されています。

6.105.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.105.3 サンプルコード

extern void foo(long a);

void bar(char a)
{
    long b = a; /* W0125 */
    foo(a); /* W0125 */
}

6.105.4 関連メッセージ

6.105.5 対応バージョン

1.0.0


Next: , Previous: W0125, Up: Messages

6.106 W0126

6.106.1 メッセージ本文

暗黙的に char 型から unsigned long 型に型変換されています。

6.106.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.106.3 サンプルコード

extern void foo(unsigned long a);

void bar(char a)
{
    unsigned long b = a; /* W0126 */
    foo(a); /* W0126 */
}

6.106.4 関連メッセージ

6.106.5 対応バージョン

1.0.0


Next: , Previous: W0126, Up: Messages

6.107 W0127

6.107.1 メッセージ本文

暗黙的に char 型から float 型に型変換されています。

6.107.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.107.3 サンプルコード

extern void foo(float a);

void bar(char a)
{
    float b = a; /* W0127 */
    foo(a); /* W0127 */
}

6.107.4 関連メッセージ

6.107.5 対応バージョン

1.0.0


Next: , Previous: W0127, Up: Messages

6.108 W0128

6.108.1 メッセージ本文

暗黙的に char 型から double 型に型変換されています。

6.108.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.108.3 サンプルコード

extern void foo(double a);

void bar(char a)
{
    double b = a; /* W0128 */
    foo(a); /* W0128 */
}

6.108.4 関連メッセージ

6.108.5 対応バージョン

1.0.0


Next: , Previous: W0128, Up: Messages

6.109 W0129

6.109.1 メッセージ本文

暗黙的に char 型から long double 型に型変換されています。

6.109.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.109.3 サンプルコード

extern void foo(long double a);

void bar(char a)
{
    long double b = a; /* W0129 */
    foo(a); /* W0129 */
}

6.109.4 関連メッセージ

6.109.5 対応バージョン

1.0.0


Next: , Previous: W0129, Up: Messages

6.110 W0130

6.110.1 メッセージ本文

暗黙的に char 型から signed long long 型に型変換されています。

6.110.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.110.3 サンプルコード

extern void foo(long long a);

void bar(char a)
{
    long long b = a; /* W0130 */
    foo(a); /* W0130 */
}

6.110.4 関連メッセージ

6.110.5 対応バージョン

1.0.0


Next: , Previous: W0130, Up: Messages

6.111 W0131

6.111.1 メッセージ本文

暗黙的に char 型から unsigned long long 型に型変換されています。

6.111.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。

6.111.3 サンプルコード

extern void foo(unsigned long long a);

void bar(char a)
{
    unsigned long long b = a; /* W0131 */
    foo(a); /* W0131 */
}

6.111.4 関連メッセージ

6.111.5 対応バージョン

1.0.0


Next: , Previous: W0131, Up: Messages

6.112 W0132

6.112.1 メッセージ本文

暗黙的に unsigned char 型から char 型に型変換されています。

6.112.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.112.3 サンプルコード

extern void foo(char a);

void bar(unsigned char a)
{
    char b = a; /* W0132 */
    foo(a); /* W0132 */
}

6.112.4 関連メッセージ

6.112.5 対応バージョン

1.0.0


Next: , Previous: W0132, Up: Messages

6.113 W0133

6.113.1 メッセージ本文

暗黙的に signed char 型から char 型に型変換されています。

6.113.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.113.3 サンプルコード

extern void foo(char a);

void bar(signed char a)
{
    char b = a; /* W0133 */
    foo(a); /* W0133 */
}

6.113.4 関連メッセージ

6.113.5 対応バージョン

1.0.0


Next: , Previous: W0133, Up: Messages

6.114 W0134

6.114.1 メッセージ本文

暗黙的に signed short 型から char 型に型変換されています。

6.114.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.114.3 サンプルコード

extern void foo(char a);

void bar(short a)
{
    char b = a; /* W0134 */
    foo(a); /* W0134 */
}

6.114.4 関連メッセージ

6.114.5 対応バージョン

1.0.0


Next: , Previous: W0134, Up: Messages

6.115 W0135

6.115.1 メッセージ本文

暗黙的に unsigned short 型から char 型に型変換されています。

6.115.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.115.3 サンプルコード

extern void foo(char a);

void bar(unsigned short a)
{
    char b = a; /* W0135 */
    foo(a); /* W0135 */
}

6.115.4 関連メッセージ

6.115.5 対応バージョン

1.0.0


Next: , Previous: W0135, Up: Messages

6.116 W0136

6.116.1 メッセージ本文

暗黙的に signed int 型から char 型に型変換されています。

6.116.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.116.3 サンプルコード

extern void foo(char a);

void bar(int a)
{
    char b = a; /* W0136 */
    foo(a); /* W0136 */
}

6.116.4 関連メッセージ

6.116.5 対応バージョン

1.0.0


Next: , Previous: W0136, Up: Messages

6.117 W0137

6.117.1 メッセージ本文

暗黙的に unsigned int 型から char 型に型変換されています。

6.117.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.117.3 サンプルコード

extern void foo(char a);

void bar(unsigned int a)
{
    char b = a; /* W0137 */
    foo(a); /* W0137 */
}

6.117.4 関連メッセージ

6.117.5 対応バージョン

1.0.0


Next: , Previous: W0137, Up: Messages

6.118 W0138

6.118.1 メッセージ本文

暗黙的に signed long 型から char 型に型変換されています。

6.118.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.118.3 サンプルコード

extern void foo(char a);

void bar(long a)
{
    char b = a; /* W0138 */
    foo(a); /* W0138 */
}

6.118.4 関連メッセージ

6.118.5 対応バージョン

1.0.0


Next: , Previous: W0138, Up: Messages

6.119 W0139

6.119.1 メッセージ本文

暗黙的に unsigned long 型から char 型に型変換されています。

6.119.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.119.3 サンプルコード

extern void foo(char a);

void bar(unsigned long a)
{
    char b = a; /* W0139 */
    foo(a); /* W0139 */
}

6.119.4 関連メッセージ

6.119.5 対応バージョン

1.0.0


Next: , Previous: W0139, Up: Messages

6.120 W0140

6.120.1 メッセージ本文

暗黙的に signed long long 型から char 型に型変換されています。

6.120.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.120.3 サンプルコード

extern void foo(char a);

void bar(long long a)
{
    char b = a; /* W0140 */
    foo(a); /* W0140 */
}

6.120.4 関連メッセージ

6.120.5 対応バージョン

1.0.0


Next: , Previous: W0140, Up: Messages

6.121 W0141

6.121.1 メッセージ本文

暗黙的に unsigned long long 型から char 型に型変換されています。

6.121.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.121.3 サンプルコード

extern void foo(char a);

void bar(unsigned long long a)
{
    char b = a; /* W0141 */
    foo(a); /* W0141 */
}

6.121.4 関連メッセージ

6.121.5 対応バージョン

1.0.0


Next: , Previous: W0141, Up: Messages

6.122 W0142

6.122.1 メッセージ本文

暗黙的に unsigned char 型から signed char 型に型変換されています。

6.122.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。

6.122.3 サンプルコード

extern void foo(signed char a);

void bar(unsigned char a)
{
    signed char b = a; /* W0142 */
    foo(a); /* W0142 */
}

6.122.4 関連メッセージ

6.122.5 対応バージョン

1.0.0


Next: , Previous: W0142, Up: Messages

6.123 W0143

6.123.1 メッセージ本文

暗黙的に unsigned short 型から signed char 型に型変換されています。

6.123.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.123.3 サンプルコード

extern void foo(signed char a);

void bar(unsigned short a)
{
    signed char b = a; /* W0143 */
    foo(a); /* W0143 */
}

6.123.4 関連メッセージ

6.123.5 対応バージョン

1.0.0


Next: , Previous: W0143, Up: Messages

6.124 W0144

6.124.1 メッセージ本文

暗黙的に unsigned short 型から signed short 型に型変換されています。

6.124.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。

6.124.3 サンプルコード

extern void foo(short a);

void bar(unsigned short a)
{
    short b = a; /* W0144 */
    foo(a); /* W0144 */
}

6.124.4 関連メッセージ

6.124.5 対応バージョン

1.0.0


Next: , Previous: W0144, Up: Messages

6.125 W0145

6.125.1 メッセージ本文

暗黙的に unsigned int 型から signed char 型に型変換されています。

6.125.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.125.3 サンプルコード

extern void foo(signed char a);

void bar(unsigned int a)
{
    signed char b = a; /* W0145 */
    foo(a); /* W0145 */
}

6.125.4 関連メッセージ

6.125.5 対応バージョン

1.0.0


Next: , Previous: W0145, Up: Messages

6.126 W0146

6.126.1 メッセージ本文

暗黙的に unsigned int 型から signed short 型に型変換されています。

6.126.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.126.3 サンプルコード

extern void foo(short a);

void bar(unsigned int a)
{
    short b = a; /* W0146 */
    foo(a); /* W0146 */
}

6.126.4 関連メッセージ

6.126.5 対応バージョン

1.0.0


Next: , Previous: W0146, Up: Messages

6.127 W0147

6.127.1 メッセージ本文

暗黙的に unsigned int 型から signed int 型に型変換されています。

6.127.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。

6.127.3 サンプルコード

extern void foo(int a);

void bar(unsigned int a)
{
    int b = a; /* W0147 */
    foo(a); /* W0147 */
}

6.127.4 関連メッセージ

6.127.5 対応バージョン

1.0.0


Next: , Previous: W0147, Up: Messages

6.128 W0148

6.128.1 メッセージ本文

暗黙的に unsigned long 型から signed char 型に型変換されています。

6.128.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.128.3 サンプルコード

extern void foo(signed char a);

void bar(unsigned long a)
{
    signed char b = a; /* W0148 */
    foo(a); /* W0148 */
}

6.128.4 関連メッセージ

6.128.5 対応バージョン

1.0.0


Next: , Previous: W0148, Up: Messages

6.129 W0149

6.129.1 メッセージ本文

暗黙的に unsigned long 型から signed short 型に型変換されています。

6.129.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.129.3 サンプルコード

extern void foo(short a);

void bar(unsigned long a)
{
    short b = a; /* W0149 */
    foo(a); /* W0149 */
}

6.129.4 関連メッセージ

6.129.5 対応バージョン

1.0.0


Next: , Previous: W0149, Up: Messages

6.130 W0150

6.130.1 メッセージ本文

暗黙的に unsigned long 型から signed int 型に型変換されています。

6.130.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.130.3 サンプルコード

extern void foo(int a);

void bar(unsigned long a)
{
    int b = a; /* W0150 */
    foo(a); /* W0150 */
}

6.130.4 関連メッセージ

6.130.5 対応バージョン

1.0.0


Next: , Previous: W0150, Up: Messages

6.131 W0151

6.131.1 メッセージ本文

暗黙的に unsigned long 型から signed long 型に型変換されています。

6.131.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。

6.131.3 サンプルコード

extern void foo(long a);

void bar(unsigned long a)
{
    long b = a; /* W0151 */
    foo(a); /* W0151 */
}

6.131.4 関連メッセージ

6.131.5 対応バージョン

1.0.0


Next: , Previous: W0151, Up: Messages

6.132 W0152

6.132.1 メッセージ本文

暗黙的に unsigned long long 型から signed char 型に型変換されています。

6.132.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.132.3 サンプルコード

extern void foo(signed char a);

void bar(unsigned long long a)
{
    signed char b = a; /* W0152 */
    foo(a); /* W0152 */
}

6.132.4 関連メッセージ

6.132.5 対応バージョン

1.0.0


Next: , Previous: W0152, Up: Messages

6.133 W0153

6.133.1 メッセージ本文

暗黙的に unsigned long long 型から signed short 型に型変換されています。

6.133.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.133.3 サンプルコード

extern void foo(short a);

void bar(unsigned long long a)
{
    short b = a; /* W0153 */
    foo(a); /* W0153 */
}

6.133.4 関連メッセージ

6.133.5 対応バージョン

1.0.0


Next: , Previous: W0153, Up: Messages

6.134 W0154

6.134.1 メッセージ本文

暗黙的に unsigned long long 型から signed int 型に型変換されています。

6.134.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.134.3 サンプルコード

extern void foo(int a);

void bar(unsigned long long a)
{
    int b = a; /* W0154 */
    foo(a); /* W0154 */
}

6.134.4 関連メッセージ

6.134.5 対応バージョン

1.0.0


Next: , Previous: W0154, Up: Messages

6.135 W0155

6.135.1 メッセージ本文

暗黙的に unsigned long long 型から signed long 型に型変換されています。

6.135.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。 また、より小さいデータへの暗黙のキャストにより、情報を損失する可能性があります。

6.135.3 サンプルコード

extern void foo(long a);

void bar(unsigned long long a)
{
    long b = a; /* W0155 */
    foo(a); /* W0155 */
}

6.135.4 関連メッセージ

6.135.5 対応バージョン

1.0.0


Next: , Previous: W0155, Up: Messages

6.136 W0156

6.136.1 メッセージ本文

暗黙的に unsigned long long 型から signed long long 型に型変換されています。

6.136.2 内容

符号なし型から符号つき型への暗黙のキャストにより、 結果が意図せず負の数になる可能性があります。

6.136.3 サンプルコード

extern void foo(long long a);

void bar(unsigned long long a)
{
    long long b = a; /* W0156 */
    foo(a); /* W0156 */
}

6.136.4 関連メッセージ

6.136.5 対応バージョン

1.0.0


Next: , Previous: W0156, Up: Messages

6.137 W0157

6.137.1 メッセージ本文

暗黙的に signed char 型から unsigned char 型に型変換されています。

6.137.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.137.3 サンプルコード

extern void foo(unsigned char a);

void bar(signed char a)
{
    unsigned char b = a; /* W0157 */
    foo(a); /* W0157 */
}

6.137.4 関連メッセージ

6.137.5 対応バージョン

1.0.0


Next: , Previous: W0157, Up: Messages

6.138 W0158

6.138.1 メッセージ本文

暗黙的に signed char 型から unsigned short 型に型変換されています。

6.138.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.138.3 サンプルコード

extern void foo(unsigned short a);

void bar(signed char a)
{
    unsigned short b = a; /* W0158 */
    foo(a); /* W0158 */
}

6.138.4 関連メッセージ

6.138.5 対応バージョン

1.0.0


Next: , Previous: W0158, Up: Messages

6.139 W0159

6.139.1 メッセージ本文

暗黙的に signed char 型から unsigned int 型に型変換されています。

6.139.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.139.3 サンプルコード

extern void foo(unsigned int a);

void bar(signed char a)
{
    unsigned int b = a; /* W0159 */
    foo(a); /* W0159 */
}

6.139.4 関連メッセージ

6.139.5 対応バージョン

1.0.0


Next: , Previous: W0159, Up: Messages

6.140 W0160

6.140.1 メッセージ本文

暗黙的に signed char 型から unsigned long 型に型変換されています。

6.140.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.140.3 サンプルコード

extern void foo(unsigned long a);

void bar(signed char a)
{
    unsigned long b = a; /* W0160 */
    foo(a); /* W0160 */
}

6.140.4 関連メッセージ

6.140.5 対応バージョン

1.0.0


Next: , Previous: W0160, Up: Messages

6.141 W0161

6.141.1 メッセージ本文

暗黙的に signed short 型から unsigned char 型に型変換されています。

6.141.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.141.3 サンプルコード

extern void foo(unsigned char a);

void bar(short a)
{
    unsigned char b = a; /* W0161 */
    foo(a); /* W0161 */
}

6.141.4 関連メッセージ

6.141.5 対応バージョン

1.0.0


Next: , Previous: W0161, Up: Messages

6.142 W0162

6.142.1 メッセージ本文

暗黙的に signed short 型から unsigned short 型に型変換されています。

6.142.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.142.3 サンプルコード

extern void foo(unsigned short a);

void bar(short a)
{
    unsigned short b = a; /* W0162 */
    foo(a); /* W0162 */
}

6.142.4 関連メッセージ

6.142.5 対応バージョン

1.0.0


Next: , Previous: W0162, Up: Messages

6.143 W0163

6.143.1 メッセージ本文

暗黙的に signed short 型から unsigned int 型に型変換されています。

6.143.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.143.3 サンプルコード

extern void foo(unsigned int a);

void bar(short a)
{
    unsigned int b = a; /* W0163 */
    foo(a); /* W0163 */
}

6.143.4 関連メッセージ

6.143.5 対応バージョン

1.0.0


Next: , Previous: W0163, Up: Messages

6.144 W0164

6.144.1 メッセージ本文

暗黙的に signed short 型から unsigned long 型に型変換されています。

6.144.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.144.3 サンプルコード

extern void foo(unsigned long a);

void bar(short a)
{
    unsigned long b = a; /* W0164 */
    foo(a); /* W0164 */
}

6.144.4 関連メッセージ

6.144.5 対応バージョン

1.0.0


Next: , Previous: W0164, Up: Messages

6.145 W0165

6.145.1 メッセージ本文

暗黙的に signed int 型から unsigned char 型に型変換されています。

6.145.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.145.3 サンプルコード

extern void foo(unsigned char a);

void bar(int a)
{
    unsigned char b = a; /* W0165 */
    foo(a); /* W0165 */
}

6.145.4 関連メッセージ

6.145.5 対応バージョン

1.0.0


Next: , Previous: W0165, Up: Messages

6.146 W0166

6.146.1 メッセージ本文

暗黙的に signed int 型から unsigned short 型に型変換されています。

6.146.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.146.3 サンプルコード

extern void foo(unsigned short a);

void bar(int a)
{
    unsigned short b = a; /* W0166 */
    foo(a); /* W0166 */
}

6.146.4 関連メッセージ

6.146.5 対応バージョン

1.0.0


Next: , Previous: W0166, Up: Messages

6.147 W0167

6.147.1 メッセージ本文

暗黙的に signed int 型から unsigned int 型に型変換されています。

6.147.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.147.3 サンプルコード

extern void foo(unsigned int a);

void bar(int a)
{
    unsigned int b = a; /* W0167 */
    foo(a); /* W0167 */
}

6.147.4 関連メッセージ

6.147.5 対応バージョン

1.0.0


Next: , Previous: W0167, Up: Messages

6.148 W0168

6.148.1 メッセージ本文

暗黙的に signed int 型から unsigned long 型に型変換されています。

6.148.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.148.3 サンプルコード

extern void foo(unsigned long a);

void bar(int a)
{
    unsigned long b = a; /* W0168 */
    foo(a); /* W0168 */
}

6.148.4 関連メッセージ

6.148.5 対応バージョン

1.0.0


Next: , Previous: W0168, Up: Messages

6.149 W0169

6.149.1 メッセージ本文

暗黙的に signed long 型から unsigned char 型に型変換されています。

6.149.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.149.3 サンプルコード

extern void foo(unsigned char a);

void bar(long a)
{
    unsigned char b = a; /* W0169 */
    foo(a); /* W0169 */
}

6.149.4 関連メッセージ

6.149.5 対応バージョン

1.0.0


Next: , Previous: W0169, Up: Messages

6.150 W0170

6.150.1 メッセージ本文

暗黙的に signed long 型から unsigned short 型に型変換されています。

6.150.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.150.3 サンプルコード

extern void foo(unsigned short a);

void bar(long a)
{
    unsigned short b = a; /* W0170 */
    foo(a); /* W0170 */
}

6.150.4 関連メッセージ

6.150.5 対応バージョン

1.0.0


Next: , Previous: W0170, Up: Messages

6.151 W0171

6.151.1 メッセージ本文

暗黙的に signed long 型から unsigned int 型に型変換されています。

6.151.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.151.3 サンプルコード

extern void foo(unsigned int a);

void bar(long a)
{
    unsigned int b = a; /* W0171 */
    foo(a); /* W0171 */
}

6.151.4 関連メッセージ

6.151.5 対応バージョン

1.0.0


Next: , Previous: W0171, Up: Messages

6.152 W0172

6.152.1 メッセージ本文

暗黙的に signed long 型から unsigned long 型に型変換されています。

6.152.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.152.3 サンプルコード

extern void foo(unsigned long a);

void bar(long a)
{
    unsigned long b = a; /* W0172 */
    foo(a); /* W0172 */
}

6.152.4 関連メッセージ

6.152.5 対応バージョン

1.0.0


Next: , Previous: W0172, Up: Messages

6.153 W0173

6.153.1 メッセージ本文

暗黙的に signed char 型から unsigned long long 型に型変換されています。

6.153.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.153.3 サンプルコード

extern void foo(unsigned long long a);

void bar(signed char a)
{
    unsigned long long b = a; /* W0173 */
    foo(a); /* W0173 */
}

6.153.4 関連メッセージ

6.153.5 対応バージョン

1.0.0


Next: , Previous: W0173, Up: Messages

6.154 W0174

6.154.1 メッセージ本文

暗黙的に signed short 型から unsigned long long 型に型変換されています。

6.154.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.154.3 サンプルコード

extern void foo(unsigned long long a);

void bar(short a)
{
    unsigned long long b = a; /* W0174 */
    foo(a); /* W0174 */
}

6.154.4 関連メッセージ

6.154.5 対応バージョン

1.0.0


Next: , Previous: W0174, Up: Messages

6.155 W0175

6.155.1 メッセージ本文

暗黙的に signed int 型から unsigned long long 型に型変換されています。

6.155.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.155.3 サンプルコード

extern void foo(unsigned long long a);

void bar(int a)
{
    unsigned long long b = a; /* W0175 */
    foo(a); /* W0175 */
}

6.155.4 関連メッセージ

6.155.5 対応バージョン

1.0.0


Next: , Previous: W0175, Up: Messages

6.156 W0176

6.156.1 メッセージ本文

暗黙的に signed long 型から unsigned long long 型に型変換されています。

6.156.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.156.3 サンプルコード

extern void foo(unsigned long long a);

void bar(long a)
{
    unsigned long long b = a; /* W0176 */
    foo(a); /* W0176 */
}

6.156.4 関連メッセージ

6.156.5 対応バージョン

1.0.0


Next: , Previous: W0176, Up: Messages

6.157 W0177

6.157.1 メッセージ本文

暗黙的に signed long long 型から unsigned char 型に型変換されています。

6.157.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.157.3 サンプルコード

extern void foo(unsigned char a);

void bar(long long a)
{
    unsigned char b = a; /* W0177 */
    foo(a); /* W0177 */
}

6.157.4 関連メッセージ

6.157.5 対応バージョン

1.0.0


Next: , Previous: W0177, Up: Messages

6.158 W0178

6.158.1 メッセージ本文

暗黙的に signed long long 型から unsigned short 型に型変換されています。

6.158.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.158.3 サンプルコード

extern void foo(unsigned short a);

void bar(long long a)
{
    unsigned short b = a; /* W0178 */
    foo(a); /* W0178 */
}

6.158.4 関連メッセージ

6.158.5 対応バージョン

1.0.0


Next: , Previous: W0178, Up: Messages

6.159 W0179

6.159.1 メッセージ本文

暗黙的に signed long long 型から unsigned int 型に型変換されています。

6.159.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.159.3 サンプルコード

extern void foo(unsigned int a);

void bar(long long a)
{
    unsigned int b = a; /* W0179 */
    foo(a); /* W0179 */
}

6.159.4 関連メッセージ

6.159.5 対応バージョン

1.0.0


Next: , Previous: W0179, Up: Messages

6.160 W0180

6.160.1 メッセージ本文

暗黙的に signed long long 型から unsigned long 型に型変換されています。

6.160.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.160.3 サンプルコード

extern void foo(unsigned long a);

void bar(long long a)
{
    unsigned long b = a; /* W0180 */
    foo(a); /* W0180 */
}

6.160.4 関連メッセージ

6.160.5 対応バージョン

1.0.0


Next: , Previous: W0180, Up: Messages

6.161 W0181

6.161.1 メッセージ本文

暗黙的に signed long long 型から unsigned long long 型に型変換されています。

6.161.2 内容

符号つき型から符号なし型への暗黙のキャストにより、 結果が意図せず負の数から大きな正の数になる可能性があります。

6.161.3 サンプルコード

extern void foo(unsigned long long a);

void bar(long long a)
{
    unsigned long long b = a; /* W0181 */
    foo(a); /* W0181 */
}

6.161.4 関連メッセージ

6.161.5 対応バージョン

1.0.0


Next: , Previous: W0181, Up: Messages

6.162 W0182

6.162.1 メッセージ本文

暗黙的に unsigned char 型から float 型に型変換されています。

6.162.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.162.3 サンプルコード

extern void foo(float a);

void bar(unsigned char a)
{
    float b = a; /* W0182 */
    foo(a); /* W0182 */
}

6.162.4 関連メッセージ

6.162.5 対応バージョン

1.0.0


Next: , Previous: W0182, Up: Messages

6.163 W0183

6.163.1 メッセージ本文

暗黙的に unsigned char 型から double 型に型変換されています。

6.163.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.163.3 サンプルコード

extern void foo(double a);

void bar(unsigned char a)
{
    double b = a; /* W0183 */
    foo(a); /* W0183 */
}

6.163.4 関連メッセージ

6.163.5 対応バージョン

1.0.0


Next: , Previous: W0183, Up: Messages

6.164 W0184

6.164.1 メッセージ本文

暗黙的に unsigned char 型から long double 型に型変換されています。

6.164.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.164.3 サンプルコード

extern void foo(long double a);

void bar(unsigned char a)
{
    long double b = a; /* W0184 */
    foo(a); /* W0184 */
}

6.164.4 関連メッセージ

6.164.5 対応バージョン

1.0.0


Next: , Previous: W0184, Up: Messages

6.165 W0185

6.165.1 メッセージ本文

暗黙的に signed char 型から float 型に型変換されています。

6.165.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.165.3 サンプルコード

extern void foo(float a);

void bar(signed char a)
{
    float b = a; /* W0185 */
    foo(a); /* W0185 */
}

6.165.4 関連メッセージ

6.165.5 対応バージョン

1.0.0


Next: , Previous: W0185, Up: Messages

6.166 W0186

6.166.1 メッセージ本文

暗黙的に signed char 型から double 型に型変換されています。

6.166.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.166.3 サンプルコード

extern void foo(double a);

void bar(signed char a)
{
    double b = a; /* W0186 */
    foo(a); /* W0186 */
}

6.166.4 関連メッセージ

6.166.5 対応バージョン

1.0.0


Next: , Previous: W0186, Up: Messages

6.167 W0187

6.167.1 メッセージ本文

暗黙的に signed char 型から long double 型に型変換されています。

6.167.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.167.3 サンプルコード

extern void foo(long double a);

void bar(signed char a)
{
    long double b = a; /* W0187 */
    foo(a); /* W0187 */
}

6.167.4 関連メッセージ

6.167.5 対応バージョン

1.0.0


Next: , Previous: W0187, Up: Messages

6.168 W0188

6.168.1 メッセージ本文

暗黙的に signed short 型から float 型に型変換されています。

6.168.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.168.3 サンプルコード

extern void foo(float a);

void bar(short a)
{
    float b = a; /* W0188 */
    foo(a); /* W0188 */
}

6.168.4 関連メッセージ

6.168.5 対応バージョン

1.0.0


Next: , Previous: W0188, Up: Messages

6.169 W0189

6.169.1 メッセージ本文

暗黙的に signed short 型から double 型に型変換されています。

6.169.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.169.3 サンプルコード

extern void foo(double a);

void bar(short a)
{
    double b = a; /* W0189 */
    foo(a); /* W0189 */
}

6.169.4 関連メッセージ

6.169.5 対応バージョン

1.0.0


Next: , Previous: W0189, Up: Messages

6.170 W0190

6.170.1 メッセージ本文

暗黙的に signed short 型から long double 型に型変換されています。

6.170.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.170.3 サンプルコード

extern void foo(long double a);

void bar(short a)
{
    long double b = a; /* W0190 */
    foo(a); /* W0190 */
}

6.170.4 関連メッセージ

6.170.5 対応バージョン

1.0.0


Next: , Previous: W0190, Up: Messages

6.171 W0191

6.171.1 メッセージ本文

暗黙的に unsigned short 型から float 型に型変換されています。

6.171.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.171.3 サンプルコード

extern void foo(float a);

void bar(unsigned short a)
{
    float b = a; /* W0191 */
    foo(a); /* W0191 */
}

6.171.4 関連メッセージ

6.171.5 対応バージョン

1.0.0


Next: , Previous: W0191, Up: Messages

6.172 W0192

6.172.1 メッセージ本文

暗黙的に unsigned short 型から double 型に型変換されています。

6.172.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.172.3 サンプルコード

extern void foo(double a);

void bar(unsigned short a)
{
    double b = a; /* W0192 */
    foo(a); /* W0192 */
}

6.172.4 関連メッセージ

6.172.5 対応バージョン

1.0.0


Next: , Previous: W0192, Up: Messages

6.173 W0193

6.173.1 メッセージ本文

暗黙的に unsigned short 型から long double 型に型変換されています。

6.173.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.173.3 サンプルコード

extern void foo(long double a);

void bar(unsigned short a)
{
    long double b = a; /* W0193 */
    foo(a); /* W0193 */
}

6.173.4 関連メッセージ

6.173.5 対応バージョン

1.0.0


Next: , Previous: W0193, Up: Messages

6.174 W0194

6.174.1 メッセージ本文

暗黙的に signed int 型から float 型に型変換されています。

6.174.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.174.3 サンプルコード

extern void foo(float a);

void bar(int a)
{
    float b = a; /* W0194 */
    foo(a); /* W0194 */
}

6.174.4 関連メッセージ

6.174.5 対応バージョン

1.0.0


Next: , Previous: W0194, Up: Messages

6.175 W0195

6.175.1 メッセージ本文

暗黙的に signed int 型から double 型に型変換されています。

6.175.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.175.3 サンプルコード

extern void foo(double a);

void bar(int a)
{
    double b = a; /* W0195 */
    foo(a); /* W0195 */
}

6.175.4 関連メッセージ

6.175.5 対応バージョン

1.0.0


Next: , Previous: W0195, Up: Messages

6.176 W0196

6.176.1 メッセージ本文

暗黙的に signed int 型から long double 型に型変換されています。

6.176.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.176.3 サンプルコード

extern void foo(long double a);

void bar(int a)
{
    long double b = a; /* W0196 */
    foo(a); /* W0196 */
}

6.176.4 関連メッセージ

6.176.5 対応バージョン

1.0.0


Next: , Previous: W0196, Up: Messages

6.177 W0197

6.177.1 メッセージ本文

暗黙的に unsigned int 型から float 型に型変換されています。

6.177.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.177.3 サンプルコード

extern void foo(float a);

void bar(unsigned int a)
{
    float b = a; /* W0197 */
    foo(a); /* W0197 */
}

6.177.4 関連メッセージ

6.177.5 対応バージョン

1.0.0


Next: , Previous: W0197, Up: Messages

6.178 W0198

6.178.1 メッセージ本文

暗黙的に unsigned int 型から double 型に型変換されています。

6.178.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.178.3 サンプルコード

extern void foo(double a);

void bar(unsigned int a)
{
    double b = a; /* W0198 */
    foo(a); /* W0198 */
}

6.178.4 関連メッセージ

6.178.5 対応バージョン

1.0.0


Next: , Previous: W0198, Up: Messages

6.179 W0199

6.179.1 メッセージ本文

暗黙的に unsigned int 型から long double 型に型変換されています。

6.179.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.179.3 サンプルコード

extern void foo(long double a);

void bar(unsigned int a)
{
    long double b = a; /* W0199 */
    foo(a); /* W0199 */
}

6.179.4 関連メッセージ

6.179.5 対応バージョン

1.0.0


Next: , Previous: W0199, Up: Messages

6.180 W0200

6.180.1 メッセージ本文

暗黙的に signed long 型から float 型に型変換されています。

6.180.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.180.3 サンプルコード

extern void foo(float a);

void bar(long a)
{
    float b = a; /* W0200 */
    foo(a); /* W0200 */
}

6.180.4 関連メッセージ

6.180.5 対応バージョン

1.0.0


Next: , Previous: W0200, Up: Messages

6.181 W0201

6.181.1 メッセージ本文

暗黙的に signed long 型から double 型に型変換されています。

6.181.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.181.3 サンプルコード

extern void foo(double a);

void bar(long a)
{
    double b = a; /* W0201 */
    foo(a); /* W0201 */
}

6.181.4 関連メッセージ

6.181.5 対応バージョン

1.0.0


Next: , Previous: W0201, Up: Messages

6.182 W0202

6.182.1 メッセージ本文

暗黙的に signed long 型から long double 型に型変換されています。

6.182.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.182.3 サンプルコード

extern void foo(long double a);

void bar(long a)
{
    long double b = a; /* W0202 */
    foo(a); /* W0202 */
}

6.182.4 関連メッセージ

6.182.5 対応バージョン

1.0.0


Next: , Previous: W0202, Up: Messages

6.183 W0203

6.183.1 メッセージ本文

暗黙的に unsigned long 型から float 型に型変換されています。

6.183.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.183.3 サンプルコード

extern void foo(float a);

void bar(unsigned long a)
{
    float b = a; /* W0203 */
    foo(a); /* W0203 */
}

6.183.4 関連メッセージ

6.183.5 対応バージョン

1.0.0


Next: , Previous: W0203, Up: Messages

6.184 W0204

6.184.1 メッセージ本文

暗黙的に unsigned long 型から double 型に型変換されています。

6.184.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.184.3 サンプルコード

extern void foo(double a);

void bar(unsigned long a)
{
    double b = a; /* W0204 */
    foo(a); /* W0204 */
}

6.184.4 関連メッセージ

6.184.5 対応バージョン

1.0.0


Next: , Previous: W0204, Up: Messages

6.185 W0205

6.185.1 メッセージ本文

暗黙的に unsigned long 型から long double 型に型変換されています。

6.185.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.185.3 サンプルコード

extern void foo(long double a);

void bar(unsigned long a)
{
    long double b = a; /* W0205 */
    foo(a); /* W0205 */
}

6.185.4 関連メッセージ

6.185.5 対応バージョン

1.0.0


Next: , Previous: W0205, Up: Messages

6.186 W0206

6.186.1 メッセージ本文

暗黙的に signed long long 型から float 型に型変換されています。

6.186.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.186.3 サンプルコード

extern void foo(float a);

void bar(long long a)
{
    float b = a; /* W0206 */
    foo(a); /* W0206 */
}

6.186.4 関連メッセージ

6.186.5 対応バージョン

1.0.0


Next: , Previous: W0206, Up: Messages

6.187 W0207

6.187.1 メッセージ本文

暗黙的に signed long long 型から double 型に型変換されています。

6.187.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.187.3 サンプルコード

extern void foo(double a);

void bar(long long a)
{
    double b = a; /* W0207 */
    foo(a); /* W0207 */
}

6.187.4 関連メッセージ

6.187.5 対応バージョン

1.0.0


Next: , Previous: W0207, Up: Messages

6.188 W0208

6.188.1 メッセージ本文

暗黙的に signed long long 型から long double 型に型変換されています。

6.188.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.188.3 サンプルコード

extern void foo(long double a);

void bar(long long a)
{
    long double b = a; /* W0208 */
    foo(a); /* W0208 */
}

6.188.4 関連メッセージ

6.188.5 対応バージョン

1.0.0


Next: , Previous: W0208, Up: Messages

6.189 W0209

6.189.1 メッセージ本文

暗黙的に unsigned long long 型から float 型に型変換されています。

6.189.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.189.3 サンプルコード

extern void foo(float a);

void bar(unsigned long long a)
{
    float b = a; /* W0209 */
    foo(a); /* W0209 */
}

6.189.4 関連メッセージ

6.189.5 対応バージョン

1.0.0


Next: , Previous: W0209, Up: Messages

6.190 W0210

6.190.1 メッセージ本文

暗黙的に unsigned long long 型から double 型に型変換されています。

6.190.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.190.3 サンプルコード

extern void foo(double a);

void bar(unsigned long long a)
{
    double b = a; /* W0210 */
    foo(a); /* W0210 */
}

6.190.4 関連メッセージ

6.190.5 対応バージョン

1.0.0


Next: , Previous: W0210, Up: Messages

6.191 W0211

6.191.1 メッセージ本文

暗黙的に unsigned long long 型から long double 型に型変換されています。

6.191.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.191.3 サンプルコード

extern void foo(long double a);

void bar(unsigned long long a)
{
    long double b = a; /* W0211 */
    foo(a); /* W0211 */
}

6.191.4 関連メッセージ

6.191.5 対応バージョン

1.0.0


Next: , Previous: W0211, Up: Messages

6.192 W0212

6.192.1 メッセージ本文

暗黙的に float 型から char 型に型変換されています。

6.192.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.192.3 サンプルコード

extern void foo(char a);

void bar(float a)
{
    char b = a; /* W0212 */
    foo(a); /* W0212 */
}

6.192.4 関連メッセージ

6.192.5 対応バージョン

1.0.0


Next: , Previous: W0212, Up: Messages

6.193 W0213

6.193.1 メッセージ本文

暗黙的に float 型から signed char 型に型変換されています。

6.193.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.193.3 サンプルコード

extern void foo(signed char a);

void bar(float a)
{
    signed char b = a; /* W0213 */
    foo(a); /* W0213 */
}

6.193.4 関連メッセージ

6.193.5 対応バージョン

1.0.0


Next: , Previous: W0213, Up: Messages

6.194 W0214

6.194.1 メッセージ本文

暗黙的に float 型から unsigned char 型に型変換されています。

6.194.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.194.3 サンプルコード

extern void foo(unsigned char a);

void bar(float a)
{
    unsigned char b = a; /* W0214 */
    foo(a); /* W0214 */
}

6.194.4 関連メッセージ

6.194.5 対応バージョン

1.0.0


Next: , Previous: W0214, Up: Messages

6.195 W0215

6.195.1 メッセージ本文

暗黙的に float 型から signed short 型に型変換されています。

6.195.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.195.3 サンプルコード

extern void foo(short a);

void bar(float a)
{
    short b = a; /* W0215 */
    foo(a); /* W0215 */
}

6.195.4 関連メッセージ

6.195.5 対応バージョン

1.0.0


Next: , Previous: W0215, Up: Messages

6.196 W0216

6.196.1 メッセージ本文

暗黙的に float 型から unsigned short 型に型変換されています。

6.196.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.196.3 サンプルコード

extern void foo(unsigned short a);

void bar(float a)
{
    unsigned short b = a; /* W0216 */
    foo(a); /* W0216 */
}

6.196.4 関連メッセージ

6.196.5 対応バージョン

1.0.0


Next: , Previous: W0216, Up: Messages

6.197 W0217

6.197.1 メッセージ本文

暗黙的に float 型から signed int 型に型変換されています。

6.197.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.197.3 サンプルコード

extern void foo(int a);

void bar(float a)
{
    int b = a; /* W0217 */
    foo(a); /* W0217 */
}

6.197.4 関連メッセージ

6.197.5 対応バージョン

1.0.0


Next: , Previous: W0217, Up: Messages

6.198 W0218

6.198.1 メッセージ本文

暗黙的に float 型から unsigned int 型に型変換されています。

6.198.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.198.3 サンプルコード

extern void foo(unsigned int a);

void bar(float a)
{
    unsigned int b = a; /* W0218 */
    foo(a); /* W0218 */
}

6.198.4 関連メッセージ

6.198.5 対応バージョン

1.0.0


Next: , Previous: W0218, Up: Messages

6.199 W0219

6.199.1 メッセージ本文

暗黙的に float 型から signed long 型に型変換されています。

6.199.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.199.3 サンプルコード

extern void foo(long a);

void bar(float a)
{
    long b = a; /* W0219 */
    foo(a); /* W0219 */
}

6.199.4 関連メッセージ

6.199.5 対応バージョン

1.0.0


Next: , Previous: W0219, Up: Messages

6.200 W0220

6.200.1 メッセージ本文

暗黙的に float 型から unsigned long 型に型変換されています。

6.200.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.200.3 サンプルコード

extern void foo(unsigned long a);

void bar(float a)
{
    unsigned long b = a; /* W0220 */
    foo(a); /* W0220 */
}

6.200.4 関連メッセージ

6.200.5 対応バージョン

1.0.0


Next: , Previous: W0220, Up: Messages

6.201 W0221

6.201.1 メッセージ本文

暗黙的に double 型から char 型に型変換されています。

6.201.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.201.3 サンプルコード

extern void foo(char a);

void bar(double a)
{
    char b = a; /* W0221 */
    foo(a); /* W0221 */
}

6.201.4 関連メッセージ

6.201.5 対応バージョン

1.0.0


Next: , Previous: W0221, Up: Messages

6.202 W0222

6.202.1 メッセージ本文

暗黙的に double 型から signed char 型に型変換されています。

6.202.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.202.3 サンプルコード

extern void foo(signed char a);

void bar(double a)
{
    signed char b = a; /* W0222 */
    foo(a); /* W0222 */
}

6.202.4 関連メッセージ

6.202.5 対応バージョン

1.0.0


Next: , Previous: W0222, Up: Messages

6.203 W0223

6.203.1 メッセージ本文

暗黙的に double 型から unsigned char 型に型変換されています。

6.203.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.203.3 サンプルコード

extern void foo(unsigned char a);

void bar(double a)
{
    unsigned char b = a; /* W0223 */
    foo(a); /* W0223 */
}

6.203.4 関連メッセージ

6.203.5 対応バージョン

1.0.0


Next: , Previous: W0223, Up: Messages

6.204 W0224

6.204.1 メッセージ本文

暗黙的に double 型から signed short 型に型変換されています。

6.204.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.204.3 サンプルコード

extern void foo(short a);

void bar(double a)
{
    short b = a; /* W0224 */
    foo(a); /* W0224 */
}

6.204.4 関連メッセージ

6.204.5 対応バージョン

1.0.0


Next: , Previous: W0224, Up: Messages

6.205 W0225

6.205.1 メッセージ本文

暗黙的に double 型から unsigned short 型に型変換されています。

6.205.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.205.3 サンプルコード

extern void foo(unsigned short a);

void bar(double a)
{
    unsigned short b = a; /* W0225 */
    foo(a); /* W0225 */
}

6.205.4 関連メッセージ

6.205.5 対応バージョン

1.0.0


Next: , Previous: W0225, Up: Messages

6.206 W0226

6.206.1 メッセージ本文

暗黙的に double 型から signed int 型に型変換されています。

6.206.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.206.3 サンプルコード

extern void foo(int a);

void bar(double a)
{
    int b = a; /* W0226 */
    foo(a); /* W0226 */
}

6.206.4 関連メッセージ

6.206.5 対応バージョン

1.0.0


Next: , Previous: W0226, Up: Messages

6.207 W0227

6.207.1 メッセージ本文

暗黙的に double 型から unsigned int 型に型変換されています。

6.207.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.207.3 サンプルコード

extern void foo(unsigned int a);

void bar(double a)
{
    unsigned int b = a; /* W0227 */
    foo(a); /* W0227 */
}

6.207.4 関連メッセージ

6.207.5 対応バージョン

1.0.0


Next: , Previous: W0227, Up: Messages

6.208 W0228

6.208.1 メッセージ本文

暗黙的に double 型から signed long 型に型変換されています。

6.208.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.208.3 サンプルコード

extern void foo(long a);

void bar(double a)
{
    long b = a; /* W0228 */
    foo(a); /* W0228 */
}

6.208.4 関連メッセージ

6.208.5 対応バージョン

1.0.0


Next: , Previous: W0228, Up: Messages

6.209 W0229

6.209.1 メッセージ本文

暗黙的に double 型から unsigned long 型に型変換されています。

6.209.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.209.3 サンプルコード

extern void foo(unsigned long a);

void bar(double a)
{
    unsigned long b = a; /* W0229 */
    foo(a); /* W0229 */
}

6.209.4 関連メッセージ

6.209.5 対応バージョン

1.0.0


Next: , Previous: W0229, Up: Messages

6.210 W0230

6.210.1 メッセージ本文

暗黙的に long double 型から char 型に型変換されています。

6.210.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.210.3 サンプルコード

extern void foo(char a);

void bar(long double a)
{
    char b = a; /* W0230 */
    foo(a); /* W0230 */
}

6.210.4 関連メッセージ

6.210.5 対応バージョン

1.0.0


Next: , Previous: W0230, Up: Messages

6.211 W0231

6.211.1 メッセージ本文

暗黙的に long double 型から signed char 型に型変換されています。

6.211.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.211.3 サンプルコード

extern void foo(signed char a);

void bar(long double a)
{
    signed char b = a; /* W0231 */
    foo(a); /* W0231 */
}

6.211.4 関連メッセージ

6.211.5 対応バージョン

1.0.0


Next: , Previous: W0231, Up: Messages

6.212 W0232

6.212.1 メッセージ本文

暗黙的に long double 型から unsigned char 型に型変換されています。

6.212.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.212.3 サンプルコード

extern void foo(unsigned char a);

void bar(long double a)
{
    unsigned char b = a; /* W0232 */
    foo(a); /* W0232 */
}

6.212.4 関連メッセージ

6.212.5 対応バージョン

1.0.0


Next: , Previous: W0232, Up: Messages

6.213 W0233

6.213.1 メッセージ本文

暗黙的に long double 型から signed short 型に型変換されています。

6.213.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.213.3 サンプルコード

extern void foo(short a);

void bar(long double a)
{
    short b = a; /* W0233 */
    foo(a); /* W0233 */
}

6.213.4 関連メッセージ

6.213.5 対応バージョン

1.0.0


Next: , Previous: W0233, Up: Messages

6.214 W0234

6.214.1 メッセージ本文

暗黙的に long double 型から unsigned short 型に型変換されています。

6.214.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.214.3 サンプルコード

extern void foo(unsigned short a);

void bar(long double a)
{
    unsigned short b = a; /* W0234 */
    foo(a); /* W0234 */
}

6.214.4 関連メッセージ

6.214.5 対応バージョン

1.0.0


Next: , Previous: W0234, Up: Messages

6.215 W0235

6.215.1 メッセージ本文

暗黙的に long double 型から signed int 型に型変換されています。

6.215.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.215.3 サンプルコード

extern void foo(int a);

void bar(long double a)
{
    int b = a; /* W0235 */
    foo(a); /* W0235 */
}

6.215.4 関連メッセージ

6.215.5 対応バージョン

1.0.0


Next: , Previous: W0235, Up: Messages

6.216 W0236

6.216.1 メッセージ本文

暗黙的に long double 型から unsigned int 型に型変換されています。

6.216.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.216.3 サンプルコード

extern void foo(unsigned int a);

void bar(long double a)
{
    unsigned int b = a; /* W0236 */
    foo(a); /* W0236 */
}

6.216.4 関連メッセージ

6.216.5 対応バージョン

1.0.0


Next: , Previous: W0236, Up: Messages

6.217 W0237

6.217.1 メッセージ本文

暗黙的に long double 型から signed long 型に型変換されています。

6.217.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.217.3 サンプルコード

extern void foo(long a);

void bar(long double a)
{
    long b = a; /* W0237 */
    foo(a); /* W0237 */
}

6.217.4 関連メッセージ

6.217.5 対応バージョン

1.0.0


Next: , Previous: W0237, Up: Messages

6.218 W0238

6.218.1 メッセージ本文

暗黙的に long double 型から unsigned long 型に型変換されています。

6.218.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.218.3 サンプルコード

extern void foo(unsigned long a);

void bar(long double a)
{
    unsigned long b = a; /* W0238 */
    foo(a); /* W0238 */
}

6.218.4 関連メッセージ

6.218.5 対応バージョン

1.0.0


Next: , Previous: W0238, Up: Messages

6.219 W0239

6.219.1 メッセージ本文

暗黙的に float 型から signed long long 型に型変換されています。

6.219.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.219.3 サンプルコード

extern void foo(long long a);

void bar(float a)
{
    long long b = a; /* W0239 */
    foo(a); /* W0239 */
}

6.219.4 関連メッセージ

6.219.5 対応バージョン

1.0.0


Next: , Previous: W0239, Up: Messages

6.220 W0240

6.220.1 メッセージ本文

暗黙的に float 型から unsigned long long 型に型変換されています。

6.220.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.220.3 サンプルコード

extern void foo(unsigned long long a);

void bar(float a)
{
    unsigned long long b = a; /* W0240 */
    foo(a); /* W0240 */
}

6.220.4 関連メッセージ

6.220.5 対応バージョン

1.0.0


Next: , Previous: W0240, Up: Messages

6.221 W0241

6.221.1 メッセージ本文

暗黙的に double 型から signed long long 型に型変換されています。

6.221.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.221.3 サンプルコード

extern void foo(long long a);

void bar(double a)
{
    long long b = a; /* W0241 */
    foo(a); /* W0241 */
}

6.221.4 関連メッセージ

6.221.5 対応バージョン

1.0.0


Next: , Previous: W0241, Up: Messages

6.222 W0242

6.222.1 メッセージ本文

暗黙的に double 型から unsigned long long 型に型変換されています。

6.222.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.222.3 サンプルコード

extern void foo(unsigned long long a);

void bar(double a)
{
    unsigned long long b = a; /* W0242 */
    foo(a); /* W0242 */
}

6.222.4 関連メッセージ

6.222.5 対応バージョン

1.0.0


Next: , Previous: W0242, Up: Messages

6.223 W0243

6.223.1 メッセージ本文

暗黙的に long double 型から signed long long 型に型変換されています。

6.223.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.223.3 サンプルコード

extern void foo(long long a);

void bar(long double a)
{
    long long b = a; /* W0243 */
    foo(a); /* W0243 */
}

6.223.4 関連メッセージ

6.223.5 対応バージョン

1.0.0


Next: , Previous: W0243, Up: Messages

6.224 W0244

6.224.1 メッセージ本文

暗黙的に long double 型から unsigned long long 型に型変換されています。

6.224.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.224.3 サンプルコード

extern void foo(unsigned long long a);

void bar(long double a)
{
    unsigned long long b = a; /* W0244 */
    foo(a); /* W0244 */
}

6.224.4 関連メッセージ

6.224.5 対応バージョン

1.0.0


Next: , Previous: W0244, Up: Messages

6.225 W0245

6.225.1 メッセージ本文

暗黙的に unsigned char 型から signed short 型に型変換されています。

6.225.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.225.3 サンプルコード

extern void foo(short a);

void bar(unsigned char a)
{
    short b = a; /* W0245 */
    foo(a); /* W0245 */
}

6.225.4 関連メッセージ

6.225.5 対応バージョン

1.0.0


Next: , Previous: W0245, Up: Messages

6.226 W0246

6.226.1 メッセージ本文

暗黙的に unsigned char 型から signed int 型に型変換されています。

6.226.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.226.3 サンプルコード

extern void foo(int a);

void bar(unsigned char a)
{
    int b = a; /* W0246 */
    foo(a); /* W0246 */
}

6.226.4 関連メッセージ

6.226.5 対応バージョン

1.0.0


Next: , Previous: W0246, Up: Messages

6.227 W0247

6.227.1 メッセージ本文

暗黙的に unsigned char 型から signed long 型に型変換されています。

6.227.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.227.3 サンプルコード

extern void foo(long a);

void bar(unsigned char a)
{
    long b = a; /* W0247 */
    foo(a); /* W0247 */
}

6.227.4 関連メッセージ

6.227.5 対応バージョン

1.0.0


Next: , Previous: W0247, Up: Messages

6.228 W0248

6.228.1 メッセージ本文

暗黙的に unsigned short 型から signed int 型に型変換されています。

6.228.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.228.3 サンプルコード

extern void foo(int a);

void bar(unsigned short a)
{
    int b = a; /* W0248 */
    foo(a); /* W0248 */
}

6.228.4 関連メッセージ

6.228.5 対応バージョン

1.0.0


Next: , Previous: W0248, Up: Messages

6.229 W0249

6.229.1 メッセージ本文

暗黙的に unsigned short 型から signed long 型に型変換されています。

6.229.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.229.3 サンプルコード

extern void foo(long a);

void bar(unsigned short a)
{
    long b = a; /* W0249 */
    foo(a); /* W0249 */
}

6.229.4 関連メッセージ

6.229.5 対応バージョン

1.0.0


Next: , Previous: W0249, Up: Messages

6.230 W0250

6.230.1 メッセージ本文

暗黙的に unsigned int 型から signed long 型に型変換されています。

6.230.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.230.3 サンプルコード

extern void foo(long a);

void bar(unsigned int a)
{
    long b = a; /* W0250 */
    foo(a); /* W0250 */
}

6.230.4 関連メッセージ

6.230.5 対応バージョン

1.0.0


Next: , Previous: W0250, Up: Messages

6.231 W0251

6.231.1 メッセージ本文

暗黙的に unsigned char 型から signed long long 型に型変換されています。

6.231.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.231.3 サンプルコード

extern void foo(long long a);

void bar(unsigned char a)
{
    long long b = a; /* W0251 */
    foo(a); /* W0251 */
}

6.231.4 関連メッセージ

6.231.5 対応バージョン

1.0.0


Next: , Previous: W0251, Up: Messages

6.232 W0252

6.232.1 メッセージ本文

暗黙的に unsigned short 型から signed long long 型に型変換されています。

6.232.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.232.3 サンプルコード

extern void foo(long long a);

void bar(unsigned short a)
{
    long long b = a; /* W0252 */
    foo(a); /* W0252 */
}

6.232.4 関連メッセージ

6.232.5 対応バージョン

1.0.0


Next: , Previous: W0252, Up: Messages

6.233 W0253

6.233.1 メッセージ本文

暗黙的に unsigned int 型から signed long long 型に型変換されています。

6.233.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.233.3 サンプルコード

extern void foo(long long a);

void bar(unsigned int a)
{
    long long b = a; /* W0253 */
    foo(a); /* W0253 */
}

6.233.4 関連メッセージ

6.233.5 対応バージョン

1.0.0


Next: , Previous: W0253, Up: Messages

6.234 W0254

6.234.1 メッセージ本文

暗黙的に unsigned long 型から signed long long 型に型変換されています。

6.234.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.234.3 サンプルコード

extern void foo(long long a);

void bar(unsigned long a)
{
    long long b = a; /* W0254 */
    foo(a); /* W0254 */
}

6.234.4 関連メッセージ

6.234.5 対応バージョン

1.0.0


Next: , Previous: W0254, Up: Messages

6.235 W0255

6.235.1 メッセージ本文

char 型の値が関数 `signed char %s()' から返されています。

6.235.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.235.3 サンプルコード

signed char func(void)
{
    char a = 0;
    return a; /* W0255 */
}

6.235.4 関連メッセージ

6.235.5 対応バージョン

1.0.0


Next: , Previous: W0255, Up: Messages

6.236 W0256

6.236.1 メッセージ本文

char 型の値が関数 `unsigned char %s()' から返されています。

6.236.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.236.3 サンプルコード

unsigned char func(void)
{
    char a = 0;
    return a; /* W0256 */
}

6.236.4 関連メッセージ

6.236.5 対応バージョン

1.0.0


Next: , Previous: W0256, Up: Messages

6.237 W0257

6.237.1 メッセージ本文

char 型の値が関数 `signed short %s()' から返されています。

6.237.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.237.3 サンプルコード

short func(void)
{
    char a = 0;
    return a; /* W0257 */
}

6.237.4 関連メッセージ

6.237.5 対応バージョン

1.0.0


Next: , Previous: W0257, Up: Messages

6.238 W0258

6.238.1 メッセージ本文

char 型の値が関数 `unsigned short %s()' から返されています。

6.238.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.238.3 サンプルコード

unsigned short func(void)
{
    char a = 0;
    return a; /* W0258 */
}

6.238.4 関連メッセージ

6.238.5 対応バージョン

1.0.0


Next: , Previous: W0258, Up: Messages

6.239 W0259

6.239.1 メッセージ本文

char 型の値が関数 `signed int %s()' から返されています。

6.239.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.239.3 サンプルコード

int func(void)
{
    char a = 0;
    return a; /* W0259 */
}

6.239.4 関連メッセージ

6.239.5 対応バージョン

1.0.0


Next: , Previous: W0259, Up: Messages

6.240 W0260

6.240.1 メッセージ本文

char 型の値が関数 `unsigned int %s()' から返されています。

6.240.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.240.3 サンプルコード

unsigned int func(void)
{
    char a = 0;
    return a; /* W0260 */
}

6.240.4 関連メッセージ

6.240.5 対応バージョン

1.0.0


Next: , Previous: W0260, Up: Messages

6.241 W0261

6.241.1 メッセージ本文

char 型の値が関数 `signed long %s()' から返されています。

6.241.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.241.3 サンプルコード

long func(void)
{
    char a = 0;
    return a; /* W0261 */
}

6.241.4 関連メッセージ

6.241.5 対応バージョン

1.0.0


Next: , Previous: W0261, Up: Messages

6.242 W0262

6.242.1 メッセージ本文

char 型の値が関数 `unsigned long %s()' から返されています。

6.242.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.242.3 サンプルコード

unsigned long func(void)
{
    char a = 0;
    return a; /* W0262 */
}

6.242.4 関連メッセージ

6.242.5 対応バージョン

1.0.0


Next: , Previous: W0262, Up: Messages

6.243 W0263

6.243.1 メッセージ本文

char 型の値が関数 `float %s()' から返されています。

6.243.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.243.3 サンプルコード

float func(void)
{
    char a = 0;
    return a; /* W0263 */
}

6.243.4 関連メッセージ

6.243.5 対応バージョン

1.0.0


Next: , Previous: W0263, Up: Messages

6.244 W0264

6.244.1 メッセージ本文

char 型の値が関数 `double %s()' から返されています。

6.244.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.244.3 サンプルコード

double func(void)
{
    char a = 0;
    return a; /* W0264 */
}

6.244.4 関連メッセージ

6.244.5 対応バージョン

1.0.0


Next: , Previous: W0264, Up: Messages

6.245 W0265

6.245.1 メッセージ本文

char 型の値が関数 `long double %s()' から返されています。

6.245.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.245.3 サンプルコード

long double func(void)
{
    char a = 0;
    return a; /* W0265 */
}

6.245.4 関連メッセージ

6.245.5 対応バージョン

1.0.0


Next: , Previous: W0265, Up: Messages

6.246 W0266

6.246.1 メッセージ本文

char 型の値が関数 `signed long long %s()' から返されています。

6.246.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.246.3 サンプルコード

long long func(void)
{
    char a = 0;
    return a; /* W0266 */
}

6.246.4 関連メッセージ

6.246.5 対応バージョン

1.0.0


Next: , Previous: W0266, Up: Messages

6.247 W0267

6.247.1 メッセージ本文

char 型の値が関数 `unsigned long long %s()' から返されています。

6.247.2 内容

単なる char 型からの暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.247.3 サンプルコード

unsigned long long func(void)
{
    char a = 0;
    return a; /* W0267 */
}

6.247.4 関連メッセージ

6.247.5 対応バージョン

1.0.0


Next: , Previous: W0267, Up: Messages

6.248 W0268

6.248.1 メッセージ本文

unsigned char 型の値が関数 `char %s()' から返されています。

6.248.2 内容

単なる char 型への暗黙のキャストは処理系定義です。

6.248.3 サンプルコード

char func(void)
{
    unsigned char a = 0;
    return a; /* W0268 */
}

6.248.4 関連メッセージ

6.248.5 対応バージョン

1.0.0


Next: , Previous: W0268, Up: Messages

6.249 W0269

6.249.1 メッセージ本文

signed char 型の値が関数 `char %s()' から返されています。

6.249.2 内容

単なる char 型への暗黙のキャストは処理系定義です。

6.249.3 サンプルコード

char func(void)
{
    signed char a = 0;
    return a; /* W0269 */
}

6.249.4 関連メッセージ

6.249.5 対応バージョン

1.0.0


Next: , Previous: W0269, Up: Messages

6.250 W0270

6.250.1 メッセージ本文

signed short 型の値が関数 `char %s()' から返されています。

6.250.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.250.3 サンプルコード

char func(void)
{
    short a = 0;
    return a; /* W0270 */
}

6.250.4 関連メッセージ

6.250.5 対応バージョン

1.0.0


Next: , Previous: W0270, Up: Messages

6.251 W0271

6.251.1 メッセージ本文

unsigned short 型の値が関数 `char %s()' から返されています。

6.251.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.251.3 サンプルコード

char func(void)
{
    unsigned short a = 0;
    return a; /* W0271 */
}

6.251.4 関連メッセージ

6.251.5 対応バージョン

1.0.0


Next: , Previous: W0271, Up: Messages

6.252 W0272

6.252.1 メッセージ本文

signed int 型の値が関数 `char %s()' から返されています。

6.252.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.252.3 サンプルコード

char func(void)
{
    int a = 0;
    return a; /* W0272 */
}

6.252.4 関連メッセージ

6.252.5 対応バージョン

1.0.0


Next: , Previous: W0272, Up: Messages

6.253 W0273

6.253.1 メッセージ本文

unsigned int 型の値が関数 `char %s()' から返されています。

6.253.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.253.3 サンプルコード

char func(void)
{
    unsigned int a = 0;
    return a; /* W0273 */
}

6.253.4 関連メッセージ

6.253.5 対応バージョン

1.0.0


Next: , Previous: W0273, Up: Messages

6.254 W0274

6.254.1 メッセージ本文

signed long 型の値が関数 `char %s()' から返されています。

6.254.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.254.3 サンプルコード

char func(void)
{
    long a = 0;
    return a; /* W0274 */
}

6.254.4 関連メッセージ

6.254.5 対応バージョン

1.0.0


Next: , Previous: W0274, Up: Messages

6.255 W0275

6.255.1 メッセージ本文

unsigned long 型の値が関数 `char %s()' から返されています。

6.255.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.255.3 サンプルコード

char func(void)
{
    unsigned long a = 0;
    return a; /* W0275 */
}

6.255.4 関連メッセージ

6.255.5 対応バージョン

1.0.0


Next: , Previous: W0275, Up: Messages

6.256 W0276

6.256.1 メッセージ本文

signed long long 型の値が関数 `char %s()' から返されています。

6.256.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.256.3 サンプルコード

char func(void)
{
    long long a = 0;
    return a; /* W0276 */
}

6.256.4 関連メッセージ

6.256.5 対応バージョン

1.0.0


Next: , Previous: W0276, Up: Messages

6.257 W0277

6.257.1 メッセージ本文

unsigned long long 型の値が関数 `char %s()' から返されています。

6.257.2 内容

単なる char 型への暗黙のキャストは処理系定義です。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.257.3 サンプルコード

char func(void)
{
    unsigned long long a = 0;
    return a; /* W0277 */
}

6.257.4 関連メッセージ

6.257.5 対応バージョン

1.0.0


Next: , Previous: W0277, Up: Messages

6.258 W0278

6.258.1 メッセージ本文

unsigned char 型の値が関数 `signed char %s()' から返されています。

6.258.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.258.3 サンプルコード

signed char func(void)
{
    unsigned char a = 0;
    return a; /* W0278 */
}

6.258.4 関連メッセージ

6.258.5 対応バージョン

1.0.0


Next: , Previous: W0278, Up: Messages

6.259 W0279

6.259.1 メッセージ本文

unsigned short 型の値が関数 `signed char %s()' から返されています。

6.259.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.259.3 サンプルコード

signed char func(void)
{
    unsigned short a = 0;
    return a; /* W0279 */
}

6.259.4 関連メッセージ

6.259.5 対応バージョン

1.0.0


Next: , Previous: W0279, Up: Messages

6.260 W0280

6.260.1 メッセージ本文

unsigned short 型の値が関数 `signed short %s()' から返されています。

6.260.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.260.3 サンプルコード

short func(void)
{
    unsigned short a = 0;
    return a; /* W0280 */
}

6.260.4 関連メッセージ

6.260.5 対応バージョン

1.0.0


Next: , Previous: W0280, Up: Messages

6.261 W0281

6.261.1 メッセージ本文

unsigned int 型の値が関数 `signed char %s()' から返されています。

6.261.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.261.3 サンプルコード

signed char func(void)
{
    unsigned int a = 0;
    return a; /* W0281 */
}

6.261.4 関連メッセージ

6.261.5 対応バージョン

1.0.0


Next: , Previous: W0281, Up: Messages

6.262 W0282

6.262.1 メッセージ本文

unsigned int 型の値が関数 `signed short %s()' から返されています。

6.262.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.262.3 サンプルコード

short func(void)
{
    unsigned int a = 0;
    return a; /* W0282 */
}

6.262.4 関連メッセージ

6.262.5 対応バージョン

1.0.0


Next: , Previous: W0282, Up: Messages

6.263 W0283

6.263.1 メッセージ本文

unsigned int 型の値が関数 `signed int %s()' から返されています。

6.263.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.263.3 サンプルコード

int func(void)
{
    unsigned int a = 0;
    return a; /* W0283 */
}

6.263.4 関連メッセージ

6.263.5 対応バージョン

1.0.0


Next: , Previous: W0283, Up: Messages

6.264 W0284

6.264.1 メッセージ本文

unsigned long 型の値が関数 `signed char %s()' から返されています。

6.264.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.264.3 サンプルコード

signed char func(void)
{
    unsigned long a = 0;
    return a; /* W0284 */
}

6.264.4 関連メッセージ

6.264.5 対応バージョン

1.0.0


Next: , Previous: W0284, Up: Messages

6.265 W0285

6.265.1 メッセージ本文

unsigned long 型の値が関数 `signed short %s()' から返されています。

6.265.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.265.3 サンプルコード

short func(void)
{
    unsigned long a = 0;
    return a; /* W0285 */
}

6.265.4 関連メッセージ

6.265.5 対応バージョン

1.0.0


Next: , Previous: W0285, Up: Messages

6.266 W0286

6.266.1 メッセージ本文

unsigned long 型の値が関数 `signed int %s()' から返されています。

6.266.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.266.3 サンプルコード

int func(void)
{
    unsigned long a = 0;
    return a; /* W0286 */
}

6.266.4 関連メッセージ

6.266.5 対応バージョン

1.0.0


Next: , Previous: W0286, Up: Messages

6.267 W0287

6.267.1 メッセージ本文

unsigned long 型の値が関数 `signed long %s()' から返されています。

6.267.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.267.3 サンプルコード

long func(void)
{
    unsigned long a = 0;
    return a; /* W0287 */
}

6.267.4 関連メッセージ

6.267.5 対応バージョン

1.0.0


Next: , Previous: W0287, Up: Messages

6.268 W0288

6.268.1 メッセージ本文

unsigned long long 型の値が関数 `signed char %s()' から返されています。

6.268.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.268.3 サンプルコード

signed char func(void)
{
    unsigned long long a = 0;
    return a; /* W0288 */
}

6.268.4 関連メッセージ

6.268.5 対応バージョン

1.0.0


Next: , Previous: W0288, Up: Messages

6.269 W0289

6.269.1 メッセージ本文

unsigned long long 型の値が関数 `signed short %s()' から返されています。

6.269.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.269.3 サンプルコード

short func(void)
{
    unsigned long long a = 0;
    return a; /* W0289 */
}

6.269.4 関連メッセージ

6.269.5 対応バージョン

1.0.0


Next: , Previous: W0289, Up: Messages

6.270 W0290

6.270.1 メッセージ本文

unsigned long long 型の値が関数 `signed int %s()' から返されています。

6.270.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.270.3 サンプルコード

int func(void)
{
    unsigned long long a = 0;
    return a; /* W0290 */
}

6.270.4 関連メッセージ

6.270.5 対応バージョン

1.0.0


Next: , Previous: W0290, Up: Messages

6.271 W0291

6.271.1 メッセージ本文

unsigned long long 型の値が関数 `signed long %s()' から返されています。

6.271.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.271.3 サンプルコード

long func(void)
{
    unsigned long long a = 0;
    return a; /* W0291 */
}

6.271.4 関連メッセージ

6.271.5 対応バージョン

1.0.0


Next: , Previous: W0291, Up: Messages

6.272 W0292

6.272.1 メッセージ本文

unsigned long long 型の値が関数 `signed long long %s()' から返されています。

6.272.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.272.3 サンプルコード

long long func(void)
{
    unsigned long long a = 0;
    return a; /* W0292 */
}

6.272.4 関連メッセージ

6.272.5 対応バージョン

1.0.0


Next: , Previous: W0292, Up: Messages

6.273 W0293

6.273.1 メッセージ本文

signed char 型の値が関数 `unsigned char %s()' から返されています。

6.273.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.273.3 サンプルコード

unsigned char func(void)
{
    signed char a = 0;
    return a; /* W0293 */
}

6.273.4 関連メッセージ

6.273.5 対応バージョン

1.0.0


Next: , Previous: W0293, Up: Messages

6.274 W0294

6.274.1 メッセージ本文

signed char 型の値が関数 `unsigned short %s()' から返されています。

6.274.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.274.3 サンプルコード

unsigned short func(void)
{
    signed char a = 0;
    return a; /* W0294 */
}

6.274.4 関連メッセージ

6.274.5 対応バージョン

1.0.0


Next: , Previous: W0294, Up: Messages

6.275 W0295

6.275.1 メッセージ本文

signed char 型の値が関数 `unsigned int %s()' から返されています。

6.275.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.275.3 サンプルコード

unsigned int func(void)
{
    signed char a = 0;
    return a; /* W0295 */
}

6.275.4 関連メッセージ

6.275.5 対応バージョン

1.0.0


Next: , Previous: W0295, Up: Messages

6.276 W0296

6.276.1 メッセージ本文

signed char 型の値が関数 `unsigned long %s()' から返されています。

6.276.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.276.3 サンプルコード

unsigned long func(void)
{
    signed char a = 0;
    return a; /* W0296 */
}

6.276.4 関連メッセージ

6.276.5 対応バージョン

1.0.0


Next: , Previous: W0296, Up: Messages

6.277 W0297

6.277.1 メッセージ本文

signed short 型の値が関数 `unsigned char %s()' から返されています。

6.277.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.277.3 サンプルコード

unsigned char func(void)
{
    short a = 0;
    return a; /* W0297 */
}

6.277.4 関連メッセージ

6.277.5 対応バージョン

1.0.0


Next: , Previous: W0297, Up: Messages

6.278 W0298

6.278.1 メッセージ本文

signed short 型の値が関数 `unsigned short %s()' から返されています。

6.278.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.278.3 サンプルコード

unsigned short func(void)
{
    short a = 0;
    return a; /* W0298 */
}

6.278.4 関連メッセージ

6.278.5 対応バージョン

1.0.0


Next: , Previous: W0298, Up: Messages

6.279 W0299

6.279.1 メッセージ本文

signed short 型の値が関数 `unsigned int %s()' から返されています。

6.279.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.279.3 サンプルコード

unsigned int func(void)
{
    short a = 0;
    return a; /* W0299 */
}

6.279.4 関連メッセージ

6.279.5 対応バージョン

1.0.0


Next: , Previous: W0299, Up: Messages

6.280 W0300

6.280.1 メッセージ本文

signed short 型の値が関数 `unsigned long %s()' から返されています。

6.280.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.280.3 サンプルコード

unsigned long func(void)
{
    short a = 0;
    return a; /* W0300 */
}

6.280.4 関連メッセージ

6.280.5 対応バージョン

1.0.0


Next: , Previous: W0300, Up: Messages

6.281 W0301

6.281.1 メッセージ本文

signed int 型の値が関数 `unsigned char %s()' から返されています。

6.281.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.281.3 サンプルコード

unsigned char func(void)
{
    int a = 0;
    return a; /* W0301 */
}

6.281.4 関連メッセージ

6.281.5 対応バージョン

1.0.0


Next: , Previous: W0301, Up: Messages

6.282 W0302

6.282.1 メッセージ本文

signed int 型の値が関数 `unsigned short %s()' から返されています。

6.282.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.282.3 サンプルコード

unsigned short func(void)
{
    int a = 0;
    return a; /* W0302 */
}

6.282.4 関連メッセージ

6.282.5 対応バージョン

1.0.0


Next: , Previous: W0302, Up: Messages

6.283 W0303

6.283.1 メッセージ本文

signed int 型の値が関数 `unsigned int %s()' から返されています。

6.283.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.283.3 サンプルコード

unsigned int func(void)
{
    int a = 0;
    return a; /* W0303 */
}

6.283.4 関連メッセージ

6.283.5 対応バージョン

1.0.0


Next: , Previous: W0303, Up: Messages

6.284 W0304

6.284.1 メッセージ本文

signed int 型の値が関数 `unsigned long %s()' から返されています。

6.284.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.284.3 サンプルコード

unsigned long func(void)
{
    int a = 0;
    return a; /* W0304 */
}

6.284.4 関連メッセージ

6.284.5 対応バージョン

1.0.0


Next: , Previous: W0304, Up: Messages

6.285 W0305

6.285.1 メッセージ本文

signed long 型の値が関数 `unsigned char %s()' から返されています。

6.285.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.285.3 サンプルコード

unsigned char func(void)
{
    long a = 0;
    return a; /* W0305 */
}

6.285.4 関連メッセージ

6.285.5 対応バージョン

1.0.0


Next: , Previous: W0305, Up: Messages

6.286 W0306

6.286.1 メッセージ本文

signed long 型の値が関数 `unsigned short %s()' から返されています。

6.286.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.286.3 サンプルコード

unsigned short func(void)
{
    long a = 0;
    return a; /* W0306 */
}

6.286.4 関連メッセージ

6.286.5 対応バージョン

1.0.0


Next: , Previous: W0306, Up: Messages

6.287 W0307

6.287.1 メッセージ本文

signed long 型の値が関数 `unsigned int %s()' から返されています。

6.287.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.287.3 サンプルコード

unsigned int func(void)
{
    long a = 0;
    return a; /* W0307 */
}

6.287.4 関連メッセージ

6.287.5 対応バージョン

1.0.0


Next: , Previous: W0307, Up: Messages

6.288 W0308

6.288.1 メッセージ本文

signed long 型の値が関数 `unsigned long %s()' から返されています。

6.288.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.288.3 サンプルコード

unsigned long func(void)
{
    long a = 0;
    return a; /* W0308 */
}

6.288.4 関連メッセージ

6.288.5 対応バージョン

1.0.0


Next: , Previous: W0308, Up: Messages

6.289 W0309

6.289.1 メッセージ本文

signed char 型の値が関数 `unsigned long long %s()' から返されています。

6.289.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.289.3 サンプルコード

unsigned long long func(void)
{
    signed char a = 0;
    return a; /* W0309 */
}

6.289.4 関連メッセージ

6.289.5 対応バージョン

1.0.0


Next: , Previous: W0309, Up: Messages

6.290 W0310

6.290.1 メッセージ本文

signed short 型の値が関数 `unsigned long long %s()' から返されています。

6.290.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.290.3 サンプルコード

unsigned long long func(void)
{
    short a = 0;
    return a; /* W0310 */
}

6.290.4 関連メッセージ

6.290.5 対応バージョン

1.0.0


Next: , Previous: W0310, Up: Messages

6.291 W0311

6.291.1 メッセージ本文

signed int 型の値が関数 `unsigned long long %s()' から返されています。

6.291.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.291.3 サンプルコード

unsigned long long func(void)
{
    int a = 0;
    return a; /* W0311 */
}

6.291.4 関連メッセージ

6.291.5 対応バージョン

1.0.0


Next: , Previous: W0311, Up: Messages

6.292 W0312

6.292.1 メッセージ本文

signed long 型の値が関数 `unsigned long long %s()' から返されています。

6.292.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.292.3 サンプルコード

unsigned long long func(void)
{
    long a = 0;
    return a; /* W0312 */
}

6.292.4 関連メッセージ

6.292.5 対応バージョン

1.0.0


Next: , Previous: W0312, Up: Messages

6.293 W0313

6.293.1 メッセージ本文

signed long long 型の値が関数 `unsigned char %s()' から返されています。

6.293.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.293.3 サンプルコード

unsigned char func(void)
{
    long long a = 0;
    return a; /* W0313 */
}

6.293.4 関連メッセージ

6.293.5 対応バージョン

1.0.0


Next: , Previous: W0313, Up: Messages

6.294 W0314

6.294.1 メッセージ本文

signed long long 型の値が関数 `unsigned short %s()' から返されています。

6.294.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.294.3 サンプルコード

unsigned short func(void)
{
    long long a = 0;
    return a; /* W0314 */
}

6.294.4 関連メッセージ

6.294.5 対応バージョン

1.0.0


Next: , Previous: W0314, Up: Messages

6.295 W0315

6.295.1 メッセージ本文

signed long long 型の値が関数 `unsigned int %s()' から返されています。

6.295.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.295.3 サンプルコード

unsigned int func(void)
{
    long long a = 0;
    return a; /* W0315 */
}

6.295.4 関連メッセージ

6.295.5 対応バージョン

1.0.0


Next: , Previous: W0315, Up: Messages

6.296 W0316

6.296.1 メッセージ本文

signed long long 型の値が関数 `unsigned long %s()' から返されています。

6.296.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。 また、より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.296.3 サンプルコード

unsigned long func(void)
{
    long long a = 0;
    return a; /* W0316 */
}

6.296.4 関連メッセージ

6.296.5 対応バージョン

1.0.0


Next: , Previous: W0316, Up: Messages

6.297 W0317

6.297.1 メッセージ本文

signed long long 型の値が関数 `unsigned long long %s()' から返されています。

6.297.2 内容

符号つき型から符号なし型への暗黙のキャストにより、結果が意図せず負の数から大きな正の数になる可能性があります。

6.297.3 サンプルコード

unsigned long long func(void)
{
    long long a = 0;
    return a; /* W0317 */
}

6.297.4 関連メッセージ

6.297.5 対応バージョン

1.0.0


Next: , Previous: W0317, Up: Messages

6.298 W0318

6.298.1 メッセージ本文

unsigned char 型の値が関数 `float %s()' から返されています。

6.298.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.298.3 サンプルコード

float func(void)
{
    unsigned char a = 0;
    return a; /* W0318 */
}

6.298.4 関連メッセージ

6.298.5 対応バージョン

1.0.0


Next: , Previous: W0318, Up: Messages

6.299 W0319

6.299.1 メッセージ本文

unsigned char 型の値が関数 `double %s()' から返されています。

6.299.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.299.3 サンプルコード

double func(void)
{
    unsigned char a = 0;
    return a; /* W0319 */
}

6.299.4 関連メッセージ

6.299.5 対応バージョン

1.0.0


Next: , Previous: W0319, Up: Messages

6.300 W0320

6.300.1 メッセージ本文

unsigned char 型の値が関数 `long double %s()' から返されています。

6.300.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.300.3 サンプルコード

long double func(void)
{
    unsigned char a = 0;
    return a; /* W0320 */
}

6.300.4 関連メッセージ

6.300.5 対応バージョン

1.0.0


Next: , Previous: W0320, Up: Messages

6.301 W0321

6.301.1 メッセージ本文

signed char 型の値が関数 `float %s()' から返されています。

6.301.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.301.3 サンプルコード

float func(void)
{
    unsigned char a = 0;
    return a; /* W0321 */
}

6.301.4 関連メッセージ

6.301.5 対応バージョン

1.0.0


Next: , Previous: W0321, Up: Messages

6.302 W0322

6.302.1 メッセージ本文

signed char 型の値が関数 `double %s()' から返されています。

6.302.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.302.3 サンプルコード

double func(void)
{
    unsigned char a = 0;
    return a; /* W0322 */
}

6.302.4 関連メッセージ

6.302.5 対応バージョン

1.0.0


Next: , Previous: W0322, Up: Messages

6.303 W0323

6.303.1 メッセージ本文

signed char 型の値が関数 `long double %s()' から返されています。

6.303.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.303.3 サンプルコード

long double func(void)
{
    unsigned char a = 0;
    return a; /* W0323 */
}

6.303.4 関連メッセージ

6.303.5 対応バージョン

1.0.0


Next: , Previous: W0323, Up: Messages

6.304 W0324

6.304.1 メッセージ本文

signed short 型の値が関数 `float %s()' から返されています。

6.304.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.304.3 サンプルコード

float func(void)
{
    short a = 0;
    return a; /* W0324 */
}

6.304.4 関連メッセージ

6.304.5 対応バージョン

1.0.0


Next: , Previous: W0324, Up: Messages

6.305 W0325

6.305.1 メッセージ本文

signed short 型の値が関数 `double %s()' から返されています。

6.305.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.305.3 サンプルコード

double func(void)
{
    short a = 0;
    return a; /* W0325 */
}

6.305.4 関連メッセージ

6.305.5 対応バージョン

1.0.0


Next: , Previous: W0325, Up: Messages

6.306 W0326

6.306.1 メッセージ本文

signed short 型の値が関数 `long double %s()' から返されています。

6.306.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.306.3 サンプルコード

long double func(void)
{
    short a = 0;
    return a; /* W0326 */
}

6.306.4 関連メッセージ

6.306.5 対応バージョン

1.0.0


Next: , Previous: W0326, Up: Messages

6.307 W0327

6.307.1 メッセージ本文

unsigned short 型の値が関数 `float %s()' から返されています。

6.307.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.307.3 サンプルコード

float func(void)
{
    unsigned short a = 0;
    return a; /* W0327 */
}

6.307.4 関連メッセージ

6.307.5 対応バージョン

1.0.0


Next: , Previous: W0327, Up: Messages

6.308 W0328

6.308.1 メッセージ本文

unsigned short 型の値が関数 `double %s()' から返されています。

6.308.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.308.3 サンプルコード

double func(void)
{
    unsigned short a = 0;
    return a; /* W0328 */
}

6.308.4 関連メッセージ

6.308.5 対応バージョン

1.0.0


Next: , Previous: W0328, Up: Messages

6.309 W0329

6.309.1 メッセージ本文

unsigned short 型の値が関数 `long double %s()' から返されています。

6.309.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.309.3 サンプルコード

long double func(void)
{
    unsigned short a = 0;
    return a; /* W0329 */
}

6.309.4 関連メッセージ

6.309.5 対応バージョン

1.0.0


Next: , Previous: W0329, Up: Messages

6.310 W0330

6.310.1 メッセージ本文

signed int 型の値が関数 `float %s()' から返されています。

6.310.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.310.3 サンプルコード

float func(void)
{
    int a = 0;
    return a; /* W0330 */
}

6.310.4 関連メッセージ

6.310.5 対応バージョン

1.0.0


Next: , Previous: W0330, Up: Messages

6.311 W0331

6.311.1 メッセージ本文

signed int 型の値が関数 `double %s()' から返されています。

6.311.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.311.3 サンプルコード

double func(void)
{
    int a = 0;
    return a; /* W0331 */
}

6.311.4 関連メッセージ

6.311.5 対応バージョン

1.0.0


Next: , Previous: W0331, Up: Messages

6.312 W0332

6.312.1 メッセージ本文

signed int 型の値が関数 `long double %s()' から返されています。

6.312.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.312.3 サンプルコード

long double func(void)
{
    int a = 0;
    return a; /* W0332 */
}

6.312.4 関連メッセージ

6.312.5 対応バージョン

1.0.0


Next: , Previous: W0332, Up: Messages

6.313 W0333

6.313.1 メッセージ本文

unsigned int 型の値が関数 `float %s()' から返されています。

6.313.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.313.3 サンプルコード

float func(void)
{
    unsigned int a = 0;
    return a; /* W0333 */
}

6.313.4 関連メッセージ

6.313.5 対応バージョン

1.0.0


Next: , Previous: W0333, Up: Messages

6.314 W0334

6.314.1 メッセージ本文

unsigned int 型の値が関数 `double %s()' から返されています。

6.314.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.314.3 サンプルコード

double func(void)
{
    unsigned int a = 0;
    return a; /* W0334 */
}

6.314.4 関連メッセージ

6.314.5 対応バージョン

1.0.0


Next: , Previous: W0334, Up: Messages

6.315 W0335

6.315.1 メッセージ本文

unsigned int 型の値が関数 `long double %s()' から返されています。

6.315.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.315.3 サンプルコード

long double func(void)
{
    unsigned int a = 0;
    return a; /* W0335 */
}

6.315.4 関連メッセージ

6.315.5 対応バージョン

1.0.0


Next: , Previous: W0335, Up: Messages

6.316 W0336

6.316.1 メッセージ本文

signed long 型の値が関数 `float %s()' から返されています。

6.316.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.316.3 サンプルコード

float func(void)
{
    long a = 0;
    return a; /* W0336 */
}

6.316.4 関連メッセージ

6.316.5 対応バージョン

1.0.0


Next: , Previous: W0336, Up: Messages

6.317 W0337

6.317.1 メッセージ本文

signed long 型の値が関数 `double %s()' から返されています。

6.317.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.317.3 サンプルコード

double func(void)
{
    long a = 0;
    return a; /* W0337 */
}

6.317.4 関連メッセージ

6.317.5 対応バージョン

1.0.0


Next: , Previous: W0337, Up: Messages

6.318 W0338

6.318.1 メッセージ本文

signed long 型の値が関数 `long double %s()' から返されています。

6.318.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.318.3 サンプルコード

long double func(void)
{
    long a = 0;
    return a; /* W0338 */
}

6.318.4 関連メッセージ

6.318.5 対応バージョン

1.0.0


Next: , Previous: W0338, Up: Messages

6.319 W0339

6.319.1 メッセージ本文

unsigned long 型の値が関数 `float %s()' から返されています。

6.319.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.319.3 サンプルコード

float func(void)
{
    unsigned long a = 0;
    return a; /* W0339 */
}

6.319.4 関連メッセージ

6.319.5 対応バージョン

1.0.0


Next: , Previous: W0339, Up: Messages

6.320 W0340

6.320.1 メッセージ本文

unsigned long 型の値が関数 `double %s()' から返されています。

6.320.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.320.3 サンプルコード

double func(void)
{
    unsigned long a = 0;
    return a; /* W0340 */
}

6.320.4 関連メッセージ

6.320.5 対応バージョン

1.0.0


Next: , Previous: W0340, Up: Messages

6.321 W0341

6.321.1 メッセージ本文

unsigned long 型の値が関数 `long double %s()' から返されています。

6.321.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.321.3 サンプルコード

long double func(void)
{
    unsigned long a = 0;
    return a; /* W0341 */
}

6.321.4 関連メッセージ

6.321.5 対応バージョン

1.0.0


Next: , Previous: W0341, Up: Messages

6.322 W0342

6.322.1 メッセージ本文

signed long long 型の値が関数 `float %s()' から返されています。

6.322.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.322.3 サンプルコード

float func(void)
{
    long long a = 0;
    return a; /* W0342 */
}

6.322.4 関連メッセージ

6.322.5 対応バージョン

1.0.0


Next: , Previous: W0342, Up: Messages

6.323 W0343

6.323.1 メッセージ本文

signed long long 型の値が関数 `double %s()' から返されています。

6.323.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.323.3 サンプルコード

double func(void)
{
    long long a = 0;
    return a; /* W0343 */
}

6.323.4 関連メッセージ

6.323.5 対応バージョン

1.0.0


Next: , Previous: W0343, Up: Messages

6.324 W0344

6.324.1 メッセージ本文

signed long long 型の値が関数 `long double %s()' から返されています。

6.324.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.324.3 サンプルコード

long double func(void)
{
    long long a = 0;
    return a; /* W0344 */
}

6.324.4 関連メッセージ

6.324.5 対応バージョン

1.0.0


Next: , Previous: W0344, Up: Messages

6.325 W0345

6.325.1 メッセージ本文

unsigned long long 型の値が関数 `float %s()' から返されています。

6.325.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.325.3 サンプルコード

float func(void)
{
    unsigned long long a = 0;
    return a; /* W0345 */
}

6.325.4 関連メッセージ

6.325.5 対応バージョン

1.0.0


Next: , Previous: W0345, Up: Messages

6.326 W0346

6.326.1 メッセージ本文

unsigned long long 型の値が関数 `double %s()' から返されています。

6.326.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.326.3 サンプルコード

double func(void)
{
    unsigned long long a = 0;
    return a; /* W0346 */
}

6.326.4 関連メッセージ

6.326.5 対応バージョン

1.0.0


Next: , Previous: W0346, Up: Messages

6.327 W0347

6.327.1 メッセージ本文

unsigned long long 型の値が関数 `long double %s()' から返されています。

6.327.2 内容

整数型から浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.327.3 サンプルコード

long double func(void)
{
    unsigned long long a = 0;
    return a; /* W0347 */
}

6.327.4 関連メッセージ

6.327.5 対応バージョン

1.0.0


Next: , Previous: W0347, Up: Messages

6.328 W0348

6.328.1 メッセージ本文

float 型の値が関数 `char %s()' から返されています。

6.328.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.328.3 サンプルコード

char func(void)
{
    float a = 0;
    return a; /* W0348 */
}

6.328.4 関連メッセージ

6.328.5 対応バージョン

1.0.0


Next: , Previous: W0348, Up: Messages

6.329 W0349

6.329.1 メッセージ本文

float 型の値が関数 `signed char %s()' から返されています。

6.329.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.329.3 サンプルコード

signed char func(void)
{
    float a = 0;
    return a; /* W0349 */
}

6.329.4 関連メッセージ

6.329.5 対応バージョン

1.0.0


Next: , Previous: W0349, Up: Messages

6.330 W0350

6.330.1 メッセージ本文

float 型の値が関数 `unsigned char %s()' から返されています。

6.330.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.330.3 サンプルコード

unsigned char func(void)
{
    float a = 0;
    return a; /* W0350 */
}

6.330.4 関連メッセージ

6.330.5 対応バージョン

1.0.0


Next: , Previous: W0350, Up: Messages

6.331 W0351

6.331.1 メッセージ本文

float 型の値が関数 `signed short %s()' から返されています。

6.331.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.331.3 サンプルコード

short func(void)
{
    float a = 0;
    return a; /* W0351 */
}

6.331.4 関連メッセージ

6.331.5 対応バージョン

1.0.0


Next: , Previous: W0351, Up: Messages

6.332 W0352

6.332.1 メッセージ本文

float 型の値が関数 `unsigned short %s()' から返されています。

6.332.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.332.3 サンプルコード

unsigned short func(void)
{
    float a = 0;
    return a; /* W0352 */
}

6.332.4 関連メッセージ

6.332.5 対応バージョン

1.0.0


Next: , Previous: W0352, Up: Messages

6.333 W0353

6.333.1 メッセージ本文

float 型の値が関数 `signed int %s()' から返されています。

6.333.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.333.3 サンプルコード

int func(void)
{
    float a = 0;
    return a; /* W0353 */
}

6.333.4 関連メッセージ

6.333.5 対応バージョン

1.0.0


Next: , Previous: W0353, Up: Messages

6.334 W0354

6.334.1 メッセージ本文

float 型の値が関数 `unsigned int %s()' から返されています。

6.334.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.334.3 サンプルコード

unsigned int func(void)
{
    float a = 0;
    return a; /* W0354 */
}

6.334.4 関連メッセージ

6.334.5 対応バージョン

1.0.0


Next: , Previous: W0354, Up: Messages

6.335 W0355

6.335.1 メッセージ本文

float 型の値が関数 `signed long %s()' から返されています。

6.335.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.335.3 サンプルコード

long func(void)
{
    float a = 0;
    return a; /* W0355 */
}

6.335.4 関連メッセージ

6.335.5 対応バージョン

1.0.0


Next: , Previous: W0355, Up: Messages

6.336 W0356

6.336.1 メッセージ本文

float 型の値が関数 `unsigned long %s()' から返されています。

6.336.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.336.3 サンプルコード

unsigned long func(void)
{
    float a = 0;
    return a; /* W0356 */
}

6.336.4 関連メッセージ

6.336.5 対応バージョン

1.0.0


Next: , Previous: W0356, Up: Messages

6.337 W0357

6.337.1 メッセージ本文

double 型の値が関数 `char %s()' から返されています。

6.337.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.337.3 サンプルコード

char func(void)
{
    double a = 0;
    return a; /* W0357 */
}

6.337.4 関連メッセージ

6.337.5 対応バージョン

1.0.0


Next: , Previous: W0357, Up: Messages

6.338 W0358

6.338.1 メッセージ本文

double 型の値が関数 `signed char %s()' から返されています。

6.338.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.338.3 サンプルコード

signed char func(void)
{
    double a = 0;
    return a; /* W0358 */
}

6.338.4 関連メッセージ

6.338.5 対応バージョン

1.0.0


Next: , Previous: W0358, Up: Messages

6.339 W0359

6.339.1 メッセージ本文

double 型の値が関数 `unsigned char %s()' から返されています。

6.339.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.339.3 サンプルコード

unsigned char func(void)
{
    double a = 0;
    return a; /* W0359 */
}

6.339.4 関連メッセージ

6.339.5 対応バージョン

1.0.0


Next: , Previous: W0359, Up: Messages

6.340 W0360

6.340.1 メッセージ本文

double 型の値が関数 `signed short %s()' から返されています。

6.340.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.340.3 サンプルコード

short func(void)
{
    double a = 0;
    return a; /* W0360 */
}

6.340.4 関連メッセージ

6.340.5 対応バージョン

1.0.0


Next: , Previous: W0360, Up: Messages

6.341 W0361

6.341.1 メッセージ本文

double 型の値が関数 `unsigned short %s()' から返されています。

6.341.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.341.3 サンプルコード

unsigned short func(void)
{
    double a = 0;
    return a; /* W0361 */
}

6.341.4 関連メッセージ

6.341.5 対応バージョン

1.0.0


Next: , Previous: W0361, Up: Messages

6.342 W0362

6.342.1 メッセージ本文

double 型の値が関数 `signed int %s()' から返されています。

6.342.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.342.3 サンプルコード

int func(void)
{
    double a = 0;
    return a; /* W0362 */
}

6.342.4 関連メッセージ

6.342.5 対応バージョン

1.0.0


Next: , Previous: W0362, Up: Messages

6.343 W0363

6.343.1 メッセージ本文

double 型の値が関数 `unsigned int %s()' から返されています。

6.343.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.343.3 サンプルコード

unsigned int func(void)
{
    double a = 0;
    return a; /* W0363 */
}

6.343.4 関連メッセージ

6.343.5 対応バージョン

1.0.0


Next: , Previous: W0363, Up: Messages

6.344 W0364

6.344.1 メッセージ本文

double 型の値が関数 `signed long %s()' から返されています。

6.344.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.344.3 サンプルコード

long func(void)
{
    double a = 0;
    return a; /* W0364 */
}

6.344.4 関連メッセージ

6.344.5 対応バージョン

1.0.0


Next: , Previous: W0364, Up: Messages

6.345 W0365

6.345.1 メッセージ本文

double 型の値が関数 `unsigned long %s()' から返されています。

6.345.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.345.3 サンプルコード

unsigned long func(void)
{
    double a = 0;
    return a; /* W0365 */
}

6.345.4 関連メッセージ

6.345.5 対応バージョン

1.0.0


Next: , Previous: W0365, Up: Messages

6.346 W0366

6.346.1 メッセージ本文

long double 型の値が関数 `char %s()' から返されています。

6.346.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.346.3 サンプルコード

char func(void)
{
    long double a = 0;
    return a; /* W0366 */
}

6.346.4 関連メッセージ

6.346.5 対応バージョン

1.0.0


Next: , Previous: W0366, Up: Messages

6.347 W0367

6.347.1 メッセージ本文

long double 型の値が関数 `signed char %s()' から返されています。

6.347.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.347.3 サンプルコード

signed char func(void)
{
    long double a = 0;
    return a; /* W0367 */
}

6.347.4 関連メッセージ

6.347.5 対応バージョン

1.0.0


Next: , Previous: W0367, Up: Messages

6.348 W0368

6.348.1 メッセージ本文

long double 型の値が関数 `unsigned char %s()' から返されています。

6.348.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.348.3 サンプルコード

unsigned char func(void)
{
    long double a = 0;
    return a; /* W0368 */
}

6.348.4 関連メッセージ

6.348.5 対応バージョン

1.0.0


Next: , Previous: W0368, Up: Messages

6.349 W0369

6.349.1 メッセージ本文

long double 型の値が関数 `signed short %s()' から返されています。

6.349.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.349.3 サンプルコード

short func(void)
{
    long double a = 0;
    return a; /* W0369 */
}

6.349.4 関連メッセージ

6.349.5 対応バージョン

1.0.0


Next: , Previous: W0369, Up: Messages

6.350 W0370

6.350.1 メッセージ本文

long double 型の値が関数 `unsigned short %s()' から返されています。

6.350.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.350.3 サンプルコード

unsigned short func(void)
{
    long double a = 0;
    return a; /* W0370 */
}

6.350.4 関連メッセージ

6.350.5 対応バージョン

1.0.0


Next: , Previous: W0370, Up: Messages

6.351 W0371

6.351.1 メッセージ本文

long double 型の値が関数 `signed int %s()' から返されています。

6.351.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.351.3 サンプルコード

int func(void)
{
    long double a = 0;
    return a; /* W0371 */
}

6.351.4 関連メッセージ

6.351.5 対応バージョン

1.0.0


Next: , Previous: W0371, Up: Messages

6.352 W0372

6.352.1 メッセージ本文

long double 型の値が関数 `unsigned int %s()' から返されています。

6.352.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.352.3 サンプルコード

unsigned int func(void)
{
    long double a = 0;
    return a; /* W0372 */
}

6.352.4 関連メッセージ

6.352.5 対応バージョン

1.0.0


Next: , Previous: W0372, Up: Messages

6.353 W0373

6.353.1 メッセージ本文

long double 型の値が関数 `signed long %s()' から返されています。

6.353.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.353.3 サンプルコード

long func(void)
{
    long double a = 0;
    return a; /* W0373 */
}

6.353.4 関連メッセージ

6.353.5 対応バージョン

1.0.0


Next: , Previous: W0373, Up: Messages

6.354 W0374

6.354.1 メッセージ本文

long double 型の値が関数 `unsigned long %s()' から返されています。

6.354.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.354.3 サンプルコード

unsigned long func(void)
{
    long double a = 0;
    return a; /* W0374 */
}

6.354.4 関連メッセージ

6.354.5 対応バージョン

1.0.0


Next: , Previous: W0374, Up: Messages

6.355 W0375

6.355.1 メッセージ本文

float 型の値が関数 `signed long long %s()' から返されています。

6.355.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.355.3 サンプルコード

long long func(void)
{
    float a = 0;
    return a; /* W0375 */
}

6.355.4 関連メッセージ

6.355.5 対応バージョン

1.0.0


Next: , Previous: W0375, Up: Messages

6.356 W0376

6.356.1 メッセージ本文

float 型の値が関数 `unsigned long long %s()' から返されています。

6.356.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.356.3 サンプルコード

unsigned long long func(void)
{
    float a = 0;
    return a; /* W0376 */
}

6.356.4 関連メッセージ

6.356.5 対応バージョン

1.0.0


Next: , Previous: W0376, Up: Messages

6.357 W0377

6.357.1 メッセージ本文

double 型の値が関数 `signed long long %s()' から返されています。

6.357.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.357.3 サンプルコード

long long func(void)
{
    double a = 0;
    return a; /* W0377 */
}

6.357.4 関連メッセージ

6.357.5 対応バージョン

1.0.0


Next: , Previous: W0377, Up: Messages

6.358 W0378

6.358.1 メッセージ本文

double 型の値が関数 `unsigned long long %s()' から返されています。

6.358.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.358.3 サンプルコード

unsigned long long func(void)
{
    double a = 0;
    return a; /* W0378 */
}

6.358.4 関連メッセージ

6.358.5 対応バージョン

1.0.0


Next: , Previous: W0378, Up: Messages

6.359 W0379

6.359.1 メッセージ本文

long double 型の値が関数 `signed long long %s()' から返されています。

6.359.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.359.3 サンプルコード

long long func(void)
{
    long double a = 0;
    return a; /* W0379 */
}

6.359.4 関連メッセージ

6.359.5 対応バージョン

1.0.0


Next: , Previous: W0379, Up: Messages

6.360 W0380

6.360.1 メッセージ本文

long double 型の値が関数 `unsigned long long %s()' から返されています。

6.360.2 内容

浮動小数点型から整数型への暗黙のキャストにより、精度落ちになる可能性があります。

6.360.3 サンプルコード

unsigned long long func(void)
{
    long double a = 0;
    return a; /* W0380 */
}

6.360.4 関連メッセージ

6.360.5 対応バージョン

1.0.0


Next: , Previous: W0380, Up: Messages

6.361 W0381

6.361.1 メッセージ本文

signed short 型の値が関数 `signed char %s()' から返されています。

6.361.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.361.3 サンプルコード

signed char func(void)
{
    short a = 0;
    return a; /* W0381 */
}

6.361.4 関連メッセージ

6.361.5 対応バージョン

1.0.0


Next: , Previous: W0381, Up: Messages

6.362 W0382

6.362.1 メッセージ本文

unsigned short 型の値が関数 `unsigned char %s()' から返されています。

6.362.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.362.3 サンプルコード

unsigned char func(void)
{
    unsigned short a = 0;
    return a; /* W0382 */
}

6.362.4 関連メッセージ

6.362.5 対応バージョン

1.0.0


Next: , Previous: W0382, Up: Messages

6.363 W0383

6.363.1 メッセージ本文

signed int 型の値が関数 `signed char %s()' から返されています。

6.363.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.363.3 サンプルコード

signed char func(void)
{
    int a = 0;
    return a; /* W0383 */
}

6.363.4 関連メッセージ

6.363.5 対応バージョン

1.0.0


Next: , Previous: W0383, Up: Messages

6.364 W0384

6.364.1 メッセージ本文

signed int 型の値が関数 `signed short %s()' から返されています。

6.364.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.364.3 サンプルコード

short func(void)
{
    int a = 0;
    return a; /* W0384 */
}

6.364.4 関連メッセージ

6.364.5 対応バージョン

1.0.0


Next: , Previous: W0384, Up: Messages

6.365 W0385

6.365.1 メッセージ本文

unsigned int 型の値が関数 `unsigned char %s()' から返されています。

6.365.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.365.3 サンプルコード

unsigned char func(void)
{
    unsigned int a = 0;
    return a; /* W0385 */
}

6.365.4 関連メッセージ

6.365.5 対応バージョン

1.0.0


Next: , Previous: W0385, Up: Messages

6.366 W0386

6.366.1 メッセージ本文

unsigned int 型の値が関数 `unsigned short %s()' から返されています。

6.366.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.366.3 サンプルコード

unsigned short func(void)
{
    unsigned int a = 0;
    return a; /* W0386 */
}

6.366.4 関連メッセージ

6.366.5 対応バージョン

1.0.0


Next: , Previous: W0386, Up: Messages

6.367 W0387

6.367.1 メッセージ本文

signed long 型の値が関数 `signed char %s()' から返されています。

6.367.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.367.3 サンプルコード

signed char func(void)
{
    long a = 0;
    return a; /* W0387 */
}

6.367.4 関連メッセージ

6.367.5 対応バージョン

1.0.0


Next: , Previous: W0387, Up: Messages

6.368 W0388

6.368.1 メッセージ本文

signed long 型の値が関数 `signed short %s()' から返されています。

6.368.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.368.3 サンプルコード

short func(void)
{
    long a = 0;
    return a; /* W0388 */
}

6.368.4 関連メッセージ

6.368.5 対応バージョン

1.0.0


Next: , Previous: W0388, Up: Messages

6.369 W0389

6.369.1 メッセージ本文

signed long 型の値が関数 `signed int %s()' から返されています。

6.369.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.369.3 サンプルコード

int func(void)
{
    long a = 0;
    return a; /* W0389 */
}

6.369.4 関連メッセージ

6.369.5 対応バージョン

1.0.0


Next: , Previous: W0389, Up: Messages

6.370 W0390

6.370.1 メッセージ本文

unsigned long 型の値が関数 `unsigned char %s()' から返されています。

6.370.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.370.3 サンプルコード

unsigned char func(void)
{
    unsigned long a = 0;
    return a; /* W0390 */
}

6.370.4 関連メッセージ

6.370.5 対応バージョン

1.0.0


Next: , Previous: W0390, Up: Messages

6.371 W0391

6.371.1 メッセージ本文

unsigned long 型の値が関数 `unsigned short %s()' から返されています。

6.371.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.371.3 サンプルコード

unsigned short func(void)
{
    unsigned long a = 0;
    return a; /* W0391 */
}

6.371.4 関連メッセージ

6.371.5 対応バージョン

1.0.0


Next: , Previous: W0391, Up: Messages

6.372 W0392

6.372.1 メッセージ本文

unsigned long 型の値が関数 `unsigned int %s()' から返されています。

6.372.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.372.3 サンプルコード

unsigned int func(void)
{
    unsigned long a = 0;
    return a; /* W0392 */
}

6.372.4 関連メッセージ

6.372.5 対応バージョン

1.0.0


Next: , Previous: W0392, Up: Messages

6.373 W0393

6.373.1 メッセージ本文

signed long long 型の値が関数 `signed char %s()' から返されています。

6.373.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.373.3 サンプルコード

signed char func(void)
{
    long long a = 0;
    return a; /* W0393 */
}

6.373.4 関連メッセージ

6.373.5 対応バージョン

1.0.0


Next: , Previous: W0393, Up: Messages

6.374 W0394

6.374.1 メッセージ本文

signed long long 型の値が関数 `signed short %s()' から返されています。

6.374.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.374.3 サンプルコード

short func(void)
{
    long long a = 0;
    return a; /* W0394 */
}

6.374.4 関連メッセージ

6.374.5 対応バージョン

1.0.0


Next: , Previous: W0394, Up: Messages

6.375 W0395

6.375.1 メッセージ本文

signed long long 型の値が関数 `signed int %s()' から返されています。

6.375.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.375.3 サンプルコード

int func(void)
{
    long long a = 0;
    return a; /* W0395 */
}

6.375.4 関連メッセージ

6.375.5 対応バージョン

1.0.0


Next: , Previous: W0395, Up: Messages

6.376 W0396

6.376.1 メッセージ本文

signed long long 型の値が関数 `signed long %s()' から返されています。

6.376.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.376.3 サンプルコード

long func(void)
{
    long long a = 0;
    return a; /* W0396 */
}

6.376.4 関連メッセージ

6.376.5 対応バージョン

1.0.0


Next: , Previous: W0396, Up: Messages

6.377 W0397

6.377.1 メッセージ本文

unsigned long long 型の値が関数 `unsigned char %s()' から返されています。

6.377.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.377.3 サンプルコード

unsigned char func(void)
{
    unsigned long long a = 0;
    return a; /* W0397 */
}

6.377.4 関連メッセージ

6.377.5 対応バージョン

1.0.0


Next: , Previous: W0397, Up: Messages

6.378 W0398

6.378.1 メッセージ本文

unsigned long long 型の値が関数 `unsigned short %s()' から返されています。

6.378.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.378.3 サンプルコード

unsigned short func(void)
{
    unsigned long long a = 0;
    return a; /* W0398 */
}

6.378.4 関連メッセージ

6.378.5 対応バージョン

1.0.0


Next: , Previous: W0398, Up: Messages

6.379 W0399

6.379.1 メッセージ本文

unsigned long long 型の値が関数 `unsigned int %s()' から返されています。

6.379.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.379.3 サンプルコード

unsigned int func(void)
{
    unsigned long long a = 0;
    return a; /* W0399 */
}

6.379.4 関連メッセージ

6.379.5 対応バージョン

1.0.0


Next: , Previous: W0399, Up: Messages

6.380 W0400

6.380.1 メッセージ本文

unsigned long long 型の値が関数 `unsigned long %s()' から返されています。

6.380.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。 また、小さいデータ型にキャストされた結果を表現することができない場合の処理は処理系依存です。

6.380.3 サンプルコード

unsigned long func(void)
{
    unsigned long long a = 0;
    return a; /* W0400 */
}

6.380.4 関連メッセージ

6.380.5 対応バージョン

1.0.0


Next: , Previous: W0400, Up: Messages

6.381 W0401

6.381.1 メッセージ本文

unsigned char 型の値が関数 `signed short %s()' から返されています。

6.381.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.381.3 サンプルコード

short func(void)
{
    unsigned char a = 0;
    return a; /* W0401 */
}

6.381.4 関連メッセージ

6.381.5 対応バージョン

1.0.0


Next: , Previous: W0401, Up: Messages

6.382 W0402

6.382.1 メッセージ本文

unsigned char 型の値が関数 `signed int %s()' から返されています。

6.382.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.382.3 サンプルコード

int func(void)
{
    unsigned char a = 0;
    return a; /* W0402 */
}

6.382.4 関連メッセージ

6.382.5 対応バージョン

1.0.0


Next: , Previous: W0402, Up: Messages

6.383 W0403

6.383.1 メッセージ本文

unsigned char 型の値が関数 `signed long %s()' から返されています。

6.383.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.383.3 サンプルコード

long func(void)
{
    unsigned char a = 0;
    return a; /* W0403 */
}

6.383.4 関連メッセージ

6.383.5 対応バージョン

1.0.0


Next: , Previous: W0403, Up: Messages

6.384 W0404

6.384.1 メッセージ本文

unsigned short 型の値が関数 `signed int %s()' から返されています。

6.384.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.384.3 サンプルコード

int func(void)
{
    unsigned short a = 0;
    return a; /* W0404 */
}

6.384.4 関連メッセージ

6.384.5 対応バージョン

1.0.0


Next: , Previous: W0404, Up: Messages

6.385 W0405

6.385.1 メッセージ本文

unsigned short 型の値が関数 `signed long %s()' から返されています。

6.385.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.385.3 サンプルコード

long func(void)
{
    unsigned short a = 0;
    return a; /* W0405 */
}

6.385.4 関連メッセージ

6.385.5 対応バージョン

1.0.0


Next: , Previous: W0405, Up: Messages

6.386 W0406

6.386.1 メッセージ本文

unsigned int 型の値が関数 `signed long %s()' から返されています。

6.386.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.386.3 サンプルコード

long func(void)
{
    unsigned int a = 0;
    return a; /* W0406 */
}

6.386.4 関連メッセージ

6.386.5 対応バージョン

1.0.0


Next: , Previous: W0406, Up: Messages

6.387 W0407

6.387.1 メッセージ本文

unsigned char 型の値が関数 `signed long long %s()' から返されています。

6.387.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.387.3 サンプルコード

long long func(void)
{
    unsigned char a = 0;
    return a; /* W0407 */
}

6.387.4 関連メッセージ

6.387.5 対応バージョン

1.0.0


Next: , Previous: W0407, Up: Messages

6.388 W0408

6.388.1 メッセージ本文

unsigned short 型の値が関数 `signed long long %s()' から返されています。

6.388.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.388.3 サンプルコード

long long func(void)
{
    unsigned short a = 0;
    return a; /* W0408 */
}

6.388.4 関連メッセージ

6.388.5 対応バージョン

1.0.0


Next: , Previous: W0408, Up: Messages

6.389 W0409

6.389.1 メッセージ本文

unsigned int 型の値が関数 `signed long long %s()' から返されています。

6.389.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.389.3 サンプルコード

long long func(void)
{
    unsigned int a = 0;
    return a; /* W0409 */
}

6.389.4 関連メッセージ

6.389.5 対応バージョン

1.0.0


Next: , Previous: W0409, Up: Messages

6.390 W0410

6.390.1 メッセージ本文

unsigned long 型の値が関数 `signed long long %s()' から返されています。

6.390.2 内容

符号なし型から符号つき型への暗黙のキャストにより、結果が意図せず負の数になる可能性があります。

6.390.3 サンプルコード

long long func(void)
{
    unsigned long a = 0;
    return a; /* W0410 */
}

6.390.4 関連メッセージ

6.390.5 対応バージョン

1.0.0


Next: , Previous: W0410, Up: Messages

6.391 W0411

6.391.1 メッセージ本文

列挙体は、最初だけ初期化するか、全てを初期化するか、全く初期化しないかのいずれかにしてください。

6.391.2 内容

“列挙型の初期化が不十分”と判断されるのは、サンプルコードのような初期化の場合です。 このような初期化を行うと、spring や winter がどのような値で初期化されているのかがわかりづらくなります。 また、意図的に行っているのか、一部の初期化を忘れているのかの判断も難しくなります。 以上より、混乱を招く可能性の高い記述だと言えます。

6.391.3 サンプルコード

enum SEASON1 { /* W0411 */
    SPRING,
    SUMMER = 4,
    AUTUMN = 8,
    WINTER
};

enum SEASON2 { /* OK */
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER
};

enum SEASON3 { /* OK */
    SPRING = 0,
    SUMMER = 1,
    AUTUMN = 2,
    WINTER = 3
};

enum SEASON4 { /* OK */
    SPRING = 1,
    SUMMER,
    AUTUMN,
    WINTER
};

6.391.4 関連メッセージ

なし。

6.391.5 対応バージョン

1.0.0


Next: , Previous: W0411, Up: Messages

6.392 W0413

6.392.1 メッセージ本文

制御文の本体が `{}' で囲まれたブロックになっていません。

6.392.2 内容

波括弧がなければ、本体がどこまでなのかが直感的にわかりづらくなるデメリットがあります。 また、制御文における本体が単一文で済まなくなったときに、波括弧をつけ忘れるリスクもあります。

6.392.3 サンプルコード

if (x > 0)
    x++; /* W0413 */

6.392.4 関連メッセージ

6.392.5 対応バージョン

1.0.0


Next: , Previous: W0413, Up: Messages

6.393 W0414

6.393.1 メッセージ本文

制御文の本体が同じ行にあり、`{}' で囲まれたブロックになっていません。

6.393.2 内容

波括弧がなければ、本体がどこまでなのかが直感的にわかりづらくなるデメリットがあります。 また、制御文における本体が単一文で済まなくなったときに、波括弧をつけ忘れるリスクもあります。

6.393.3 サンプルコード

if (x > 0) x++; /* W0414 */

6.393.4 関連メッセージ

6.393.5 対応バージョン

1.0.0


Next: , Previous: W0414, Up: Messages

6.394 W0421

6.394.1 メッセージ本文

値が NULL になるポインタに対して間接参照が行われています。

6.394.2 内容

NULL ポインタを間接参照するときの動作は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.394.3 サンプルコード

void func(int a, int *p)
{
    int b;

    if (p) {
        b = *p; /* OK */
    }
    else {
        b = *p; /* W0421 */
    }
}

6.394.4 関連メッセージ

6.394.5 対応バージョン

1.0.0


Next: , Previous: W0421, Up: Messages

6.395 W0422

6.395.1 メッセージ本文

値が NULL になることがあるポインタに対して間接参照が行われています。

6.395.2 内容

NULL ポインタを間接参照するときの動作は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.395.3 サンプルコード

void func(int a, int *p)
{
    int b;

    if (p) {
        b = *p; /* OK */
    }

    b = *p; /* W0422 */
}

6.395.4 関連メッセージ

6.395.5 対応バージョン

1.0.0


Next: , Previous: W0422, Up: Messages

6.396 W0423

6.396.1 メッセージ本文

値が NULL になるポインタに対して算術演算を行っています。

6.396.2 内容

NULL ポインタに対して算術演算するときの動作は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.396.3 サンプルコード

int *func(int *p)
{
    if (p) {
        return p + 1; /* OK */
    }
    else {
        return p + 1; /* W0423 */
    }
}

6.396.4 関連メッセージ

6.396.5 対応バージョン

1.0.0


Next: , Previous: W0423, Up: Messages

6.397 W0424

6.397.1 メッセージ本文

値が NULL になることがあるポインタに対して算術演算を行っています。

6.397.2 内容

NULL ポインタに対して算術演算するときの動作は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.397.3 サンプルコード

int *func(int *p)
{
    int a;

    if (p) {
        a = *(p + 1); /* OK */
    }

    return p + 1; /* W0424 */
}

6.397.4 関連メッセージ

6.397.5 対応バージョン

1.0.0


Next: , Previous: W0424, Up: Messages

6.398 W0425

6.398.1 メッセージ本文

一つの行に複数の宣言または文が存在します。

6.398.2 内容

1 行中に複数の宣言や文を書くことは文法上の誤りではありませんが、コードがやや複雑になります。

6.398.3 サンプルコード

int a, b; /* W0425 */
int a; int b; /* W0425 */
struct C { int i; } c = { 0 }; c.i = a; /* W0425 */

6.398.4 関連メッセージ

なし。

6.398.5 対応バージョン

1.0.0


Next: , Previous: W0425, Up: Messages

6.399 W0431

6.399.1 メッセージ本文

この行は以前の同じ深さのインデントより左にずれています。

6.399.2 内容

インデントの付け方に一貫性が保たれていないと、解析性が低下します。

6.399.3 サンプルコード

void func()
{
    int a;
int b; /* W0431 */
    a = var();
}

6.399.4 関連メッセージ

6.399.5 対応バージョン

1.0.0


Next: , Previous: W0431, Up: Messages

6.400 W0432

6.400.1 メッセージ本文

この行はプロジェクトのインデントスタイルと合っていません。

6.400.2 内容

インデントの付け方に一貫性が保たれていないと、解析性が低下します。

6.400.3 サンプルコード

void func()
{
    int a;
      int b; /* W0432 */
    a = var();
}

6.400.4 関連メッセージ

6.400.5 対応バージョン

1.0.0


Next: , Previous: W0432, Up: Messages

6.401 W0440

6.401.1 メッセージ本文

この閉じカッコ `}' は、対応する開きカッコ `{' に合うようなインデントに置かれていません。

6.401.2 内容

制御文の開き波括弧と閉じ波括弧の配置を合っていないコードはスタイルの統一感がないという意味で解析性が低下します。

6.401.3 サンプルコード

void func()
{
    if (x == 0)
    {
        if (y == 0)
        {
            ...snip...
    } /* W0440 */
        } /* W0440 */
}

6.401.4 関連メッセージ

なし。

6.401.5 対応バージョン

1.0.0


Next: , Previous: W0440, Up: Messages

6.402 W0441

6.402.1 メッセージ本文

接尾辞がない整数リテラルの型が、int 型ではありません。

6.402.2 内容

整数定数の型が int 型でない場合、どのような型になるかは、接尾語の有無、サイズ、int の処理系依存のサイズなどによって決まります。 従って、接尾語がない場合、整数定数の型が不明確となり解析性が低下します。

6.402.3 サンプルコード

int i = 0x1234; /* W0441 */

6.402.4 関連メッセージ

なし。

6.402.5 対応バージョン

1.0.0


Next: , Previous: W0441, Up: Messages

6.403 W0442

6.403.1 メッセージ本文

関数形式マクロが定義されています。

6.403.2 内容

関数形式マクロは関数呼び出しのオーバーヘッドがない分だけ効率性にメリットがある反面、 実引数に対する型チェックが行われない、ブレークポイント等を用いたデバッグが行いにくい、などのデメリットがあります。

6.403.3 サンプルコード

#define MAX(a, b) (a < b ? b : a) /* W0442 */

6.403.4 関連メッセージ

6.403.5 対応バージョン

1.0.0


Next: , Previous: W0442, Up: Messages

6.404 W0443

6.404.1 メッセージ本文

この関数形式マクロは関数で置き換えることができる可能性があります。

6.404.2 内容

関数形式マクロは関数呼び出しのオーバーヘッドがない分だけ効率性にメリットがある反面、 実引数に対する型チェックが行われない、ブレークポイント等を用いたデバッグが行いにくい、などのデメリットがあります。

6.404.3 サンプルコード

#define MACRO(a, b) (a * b) /* W0443 */

6.404.4 関連メッセージ

6.404.5 対応バージョン

1.0.0


Next: , Previous: W0443, Up: Messages

6.405 W0444

6.405.1 メッセージ本文

`#' 演算子と `##' 演算子が一つのマクロ定義内で使われています。

6.405.2 内容

プリプロセッサが # 演算子や ## 演算子を評価する順番は、 ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.405.3 サンプルコード

#define MACRO(a) L ## #a /* W0444 */

6.405.4 関連メッセージ

6.405.5 対応バージョン

1.0.0


Next: , Previous: W0444, Up: Messages

6.406 W0445

6.406.1 メッセージ本文

複数の `##' 演算子が一つのマクロ定義内で使われています。

6.406.2 内容

プリプロセッサが # 演算子や ## 演算子を評価する順番は、 ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.406.3 サンプルコード

#define MACRO(prefix, name, suffix) int i = prefix##name##suffix /* W0445 */

6.406.4 関連メッセージ

6.406.5 対応バージョン

1.0.0


Next: , Previous: W0445, Up: Messages

6.407 W0446

6.407.1 メッセージ本文

代入演算の結果値が使われています。

6.407.2 内容

1 つの式の中に、複数の代入演算子や複合代入演算子を使用すると、文が複雑になります。

6.407.3 サンプルコード

void func(void)
{
    int a;
    int b;

    a = b += 3; /* W0446 */
}

6.407.4 関連メッセージ

なし。

6.407.5 対応バージョン

1.0.0


Next: , Previous: W0446, Up: Messages

6.408 W0447

6.408.1 メッセージ本文

カンマ演算子が for 文の制御式以外で使われています。

6.408.2 内容

カンマ演算子は複数の式を一つの文で書きたいときに使用します。主な用途は for 文です。for 文以外で使用するとコードが複雑になります。

6.408.3 サンプルコード

int a = 1;
int b = 0;

int c = (b = a, a); /* W0447 */

6.408.4 関連メッセージ

なし。

6.408.5 対応バージョン

1.0.0


Next: , Previous: W0447, Up: Messages

6.409 W0456

6.409.1 メッセージ本文

外部結合を持つオブジェクトあるいは関数 `%s' が、ヘッダファイル内で定義されています。

6.409.2 内容

ヘッダファイルは通常は複数のファイルからインクルードされることを想定します。このようなヘッダファイルに外部結合を持つオブジェクトや関数が定義されていると、インクルードされている数分定義されることになり、通常はリンクエラーとなります。

6.409.3 サンプルコード

test.h

int num = 1; /* W0456 */

int func(void) /* W0456 */
{
    return num;
}

test.c

#include "test.h"

6.409.4 関連メッセージ

なし。

6.409.5 対応バージョン

1.0.0


Next: , Previous: W0456, Up: Messages

6.410 W0457

6.410.1 メッセージ本文

関数の宣言あるいは定義で、戻り値型が明示的に定義されていないので、暗黙的に int 型と定義されます。

6.410.2 内容

関数宣言の際に型を明示しなければ、暗黙的に int 型の関数として宣言されます。これはコードを省略したい動機で使われることもあるかもしれませんが、コードの明確さが失われ、解析性を低下させます。

6.410.3 サンプルコード

func1(void); /* W0457 */

func2(void) /* W0457 */
{
    return 0;
}

6.410.4 関連メッセージ

なし。

6.410.5 対応バージョン

1.0.0


Next: , Previous: W0457, Up: Messages

6.411 W0458

6.411.1 メッセージ本文

オブジェクトの宣言あるいは定義で、型が明示的に定義されていないので、暗黙的に int 型と定義されます。

6.411.2 内容

オブジェクト宣言の際に型を明示しなければ、暗黙的に int 型の関数として宣言されます。これはコードを省略したい動機で使われることもあるかもしれませんが、コードの明確さが失われ、解析性を低下させます。

6.411.3 サンプルコード

a; /* W0458 */
b = 0; /* W0458 */
extern c; /* W0458 */
static d; /* W0458 */

int func(e) /* W0458 */
{
    const f = e; /* W0458 */
    return f;
}

6.411.4 関連メッセージ

なし。

6.411.5 対応バージョン

1.0.0


Next: , Previous: W0458, Up: Messages

6.412 W0459

6.412.1 メッセージ本文

変数 `%s' の値は、この式の評価時点では設定されていません。このプログラムは危険です。

6.412.2 内容

変数を明示的に初期化しない場合、静的変数とグローバル変数は暗黙的に 0 で初期化されますが、自動変数は不定になります。 従って、そのような自動変数を使用すると予期しない動作を引き起こす可能性があります。

6.412.3 サンプルコード

int a;

if(a > 0) { /* W0459 */
}

6.412.4 関連メッセージ

6.412.5 対応バージョン

1.0.0


Next: , Previous: W0459, Up: Messages

6.413 W0460

6.413.1 メッセージ本文

変数 `%s' の値は、この式の評価時点では設定されていないことがあります。

6.413.2 内容

変数を明示的に初期化しない場合、静的変数とグローバル変数は暗黙的に 0 で初期化されますが、自動変数は不定になります。 従って、そのような自動変数を使用すると予期しない動作を引き起こす可能性があります。

6.413.3 サンプルコード

void func(int a)
{
    int b;

    if (a == 0) {
        b = 1;
    }

    if (b > 0) { /* W0460 */
    }
}

6.413.4 関連メッセージ

6.413.5 対応バージョン

1.0.0


Next: , Previous: W0460, Up: Messages

6.414 W0461

6.414.1 メッセージ本文

値が定まっていない変数を指すポインタを関数の実引数として使っています。このプログラムは危険です。

6.414.2 内容

変数を明示的に初期化しない場合、静的変数とグローバル変数は暗黙的に 0 で初期化されますが、自動変数は不定になります。 従って、そのような自動変数を使用すると予期しない動作を引き起こす可能性があります。

6.414.3 サンプルコード

extern int func1(const int *);

void func2(int a)
{
  int b;

  func1(&a); /* OK */
  func1(&b); /* W0461 */
}

6.414.4 関連メッセージ

6.414.5 対応バージョン

1.0.0


Next: , Previous: W0461, Up: Messages

6.415 W0462

6.415.1 メッセージ本文

値が設定されていないことがありうる変数を指すポインタを関数の実引数として使っています。

6.415.2 内容

変数を明示的に初期化しない場合、静的変数とグローバル変数は暗黙的に 0 で初期化されますが、自動変数は不定になります。 従って、そのような自動変数を使用すると予期しない動作を引き起こす可能性があります。

6.415.3 サンプルコード

extern int func1(const int *);

int func2(int a)
{
    int b;

    if (a > 10) {
        b = a + 10;
    }

    func1(&b); /* W0462 */
}

6.415.4 関連メッセージ

6.415.5 対応バージョン

1.0.0


Next: , Previous: W0462, Up: Messages

6.416 W0477

6.416.1 メッセージ本文

マクロ定義の中に、対になっていない `[]'、`()'、`{}' が存在します。

6.416.2 内容

このようなマクロ定義は、プロジェクトやプログラマに特有のものになりがちなため、 外部の人が見たときの解析性が大幅に低下します。

6.416.3 サンプルコード

#define BEGIN { /* W0477 */
#define END } /* W0477 */

void func()
BEGIN
    ...snip...
END

6.416.4 関連メッセージ

6.416.5 対応バージョン

1.0.0


Next: , Previous: W0477, Up: Messages

6.417 W0478

6.417.1 メッセージ本文

このマクロは、認識不可能なコードの断片を定義しています。

6.417.2 内容

このようなマクロ定義は、プロジェクトやプログラマに特有のものになりがちなため、 外部の人が見たときの解析性が大幅に低下します。

6.417.3 サンプルコード

#define MALLOC_OR_DIE(ptr, size) ptr = malloc(size); if (!ptr) exit(1); /* W0478 */

6.417.4 関連メッセージ

6.417.5 対応バージョン

1.0.0


Next: , Previous: W0478, Up: Messages

6.418 W0479

6.418.1 メッセージ本文

このマクロ定義は typedef 宣言に置換することができます。

6.418.2 内容

外部の人が見たときの解析性が大幅に低下します。

6.418.3 サンプルコード

#define foo unsigned int /* W0479 */

6.418.4 関連メッセージ

6.418.5 対応バージョン

1.0.0


Next: , Previous: W0479, Up: Messages

6.419 W0480

6.419.1 メッセージ本文

このマクロは、制御文のキーワード、演算子、あるいは区切り文字を定義しています。

6.419.2 内容

外部の人が見たときの解析性が大幅に低下します。

6.419.3 サンプルコード

#define PLUS + /* W0480 */
#define LOOP while /* W0480 */

6.419.4 関連メッセージ

6.419.5 対応バージョン

1.0.0


Next: , Previous: W0480, Up: Messages

6.420 W0481

6.420.1 メッセージ本文

このマクロは、`{}' で囲まれたブロックを定義しています。

6.420.2 内容

外部の人が見たときの解析性が大幅に低下します。

6.420.3 サンプルコード

#define SETUP(a, b) /* W0481 */ \
    { \
        if (a) \
            b = 0; \
        else \
            b = 1; \
    }

6.420.4 関連メッセージ

6.420.5 対応バージョン

1.0.0


Next: , Previous: W0481, Up: Messages

6.421 W0482

6.421.1 メッセージ本文

このマクロは、いずれかの型指定子を定義しています。

6.421.2 内容

外部の人が見たときの解析性が大幅に低下します。

6.421.3 サンプルコード

#define COMPOSITE struct /* W0482 */

6.421.4 関連メッセージ

6.421.5 対応バージョン

1.0.0


Next: , Previous: W0482, Up: Messages

6.422 W0483

6.422.1 メッセージ本文

このマクロは、記憶域クラス指定子と型修飾子の組みを定義しています。

6.422.2 内容

外部の人が見たときの解析性が大幅に低下します。

6.422.3 サンプルコード

#define PRIVATE_FINAL static const /* W0483 */

6.422.4 関連メッセージ

6.422.5 対応バージョン

1.0.0


Next: , Previous: W0483, Up: Messages

6.423 W0488

6.423.1 メッセージ本文

関数呼び出し `()'、配列添字演算 `[]'、あるいは構造体/共用体メンバ演算 `->' または `.' が、`&&' あるいは `||' と共に使われています。`()' で結合を明確にすることを勧めます。

6.423.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、 チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.423.3 サンプルコード

while (func(&a, &b) < 0 && i > 0) { /* W0488 */
    ...snip...
}

6.423.4 関連メッセージ

6.423.5 対応バージョン

1.0.0


Next: , Previous: W0488, Up: Messages

6.424 W0489

6.424.1 メッセージ本文

単項演算子が、`&&' あるいは `||' と共に使われています。`()' で結合を明確にすることを勧めます。

6.424.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、 チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.424.3 サンプルコード

void func(unsigned int a, unsigned int b)
{
    unsigned int c = !a && b; /* W0489 */
}

6.424.4 関連メッセージ

6.424.5 対応バージョン

1.0.0


Next: , Previous: W0489, Up: Messages

6.425 W0490

6.425.1 メッセージ本文

二項演算子が、`&&' あるいは `||' と共に使われています。`()' で結合を明確にすることを勧めます。

6.425.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、 チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.425.3 サンプルコード

void func(unsigned int a, unsigned int b, unsigned int c)
{
    unsigned int d = a && b || c; /* W0490 */
}

6.425.4 関連メッセージ

6.425.5 対応バージョン

1.0.0


Next: , Previous: W0490, Up: Messages

6.426 W0491

6.426.1 メッセージ本文

同じ識別子名 `%s' は他の名前空間内の宣言でも使われています。

6.426.2 内容

名前空間が異なるからといって、同じ名前の識別子を使用すると、コードが紛らわしくなります。

6.426.3 サンプルコード

extern int foo;

struct foo { /* W0491 */
    int a;
    int b;
};

6.426.4 関連メッセージ

6.426.5 対応バージョン

1.0.0


Next: , Previous: W0491, Up: Messages

6.427 W0492

6.427.1 メッセージ本文

同じ識別子名 `%s' が構造体/共用体のメンバの他に、ラベル、タグ、または通常の識別子としても使われています。

6.427.2 内容

名前空間が異なるからといって、同じ名前の識別子を使用すると、コードが紛らわしくなります。

6.427.3 サンプルコード

extern int foo;

struct a {
    int foo; /* W0492 */
    int b;
};

void func(void)
{
    struct a a;
    int b; /* W0492 */
}

6.427.4 関連メッセージ

6.427.5 対応バージョン

1.0.0


Next: , Previous: W0492, Up: Messages

6.428 W0493

6.428.1 メッセージ本文

構造体あるいは共用体の値を関数の実引数として渡しています。

6.428.2 内容

引数にオブジェクトの値を渡すと、それらの要素のサイズ分スタックメモリを消費することになり、パフォーマンスの面でデメリットがあります。

6.428.3 サンプルコード

struct STR {
    long a;
    long b;
};

extern int foo(struct STR s);

void func(void)
{
    struct STR s = { 0 };

    foo(s); /* W0493 */
}

6.428.4 関連メッセージ

なし。

6.428.5 対応バージョン

1.0.0


Next: , Previous: W0493, Up: Messages

6.429 W0495

6.429.1 メッセージ本文

演算子 % が、他の算術演算子と共に使われています。`()' で結合を明確にすることを勧めます。

6.429.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.429.3 サンプルコード

void func(int a, int b, int c)
{
    int x = a % b  * c; /* W0495 */
}

6.429.4 関連メッセージ

6.429.5 対応バージョン

1.0.0


Next: , Previous: W0495, Up: Messages

6.430 W0496

6.430.1 メッセージ本文

三項演算子が複数回使われています。`()' で結合を明確にすることを勧めます。

6.430.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.430.3 サンプルコード

void func(int a, int b, int c, int d, int e)
{
    int f = a ? b : c ? d : e; /* W0496 */
}

6.430.4 関連メッセージ

6.430.5 対応バージョン

1.0.0


Next: , Previous: W0496, Up: Messages

6.431 W0497

6.431.1 メッセージ本文

シフト演算子、関係演算子、あるいは等価演算子が複数回使われています。`()' で結合を明確にすることを勧めます。

6.431.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.431.3 サンプルコード

void func(int a, int b, int c)
{
    int d = a << b << c; /* W0497 */
}

6.431.4 関連メッセージ

6.431.5 対応バージョン

1.0.0


Next: , Previous: W0497, Up: Messages

6.432 W0498

6.432.1 メッセージ本文

二項演算子 + - * / のうち、同じ優先順位の異なる演算子が共に使われています。`()' で結合を明確にすることを勧めます。

6.432.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.432.3 サンプルコード

void func(int a, int b, int c)
{
    int d = a - b + c; /* W0498 */
}

6.432.4 関連メッセージ

6.432.5 対応バージョン

1.0.0


Next: , Previous: W0498, Up: Messages

6.433 W0499

6.433.1 メッセージ本文

+ - * / % 以外の二項演算子のうち、同じ優先順位の異なる二項演算子が共に使われています。`()' で結合を明確にすることを勧めます。

6.433.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.433.3 サンプルコード

void func(int a, int b, int c)
{
    int d = a << b >> c; /* W0499 */
}

6.433.4 関連メッセージ

6.433.5 対応バージョン

1.0.0


Next: , Previous: W0499, Up: Messages

6.434 W0500

6.434.1 メッセージ本文

二項演算子 + - * / のうち、異なる優先順位の演算子が共に使われています。`()' で結合を明確にすることを勧めます。

6.434.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.434.3 サンプルコード

void func(int a, int b, int c)
{
    int d = a * b + c;  /* W0500 */
}

6.434.4 関連メッセージ

6.434.5 対応バージョン

1.0.0


Next: , Previous: W0500, Up: Messages

6.435 W0501

6.435.1 メッセージ本文

三項演算子が、二項演算子と共に使われています。`()' で結合を明確にすることを勧めます。

6.435.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.435.3 サンプルコード

void func(int a, int b, int c)
{
    int d = a ? a : a + c; /* W0501 */
}

6.435.4 関連メッセージ

6.435.5 対応バージョン

1.0.0


Next: , Previous: W0501, Up: Messages

6.436 W0502

6.436.1 メッセージ本文

+ - * / % 以外の二項演算子が、異なる優先順位の二項演算子と共に使われています。`()' で結合を明確にすることを勧めます。

6.436.2 内容

演算子の評価順序は ISO C90 で定められているため、曖昧さはありませんが、チーム内のメンバ全員がその順序を把握することは容易ではありません。 従って、ほとんどのメンバにとって評価順序が不明確になるため、解析性が低下します。

6.436.3 サンプルコード

void func(int a, int b, int c)
{
    int d = a != b << c; /* W0502 */
}

6.436.4 関連メッセージ

6.436.5 対応バージョン

1.0.0


Next: , Previous: W0502, Up: Messages

6.437 W0508

6.437.1 メッセージ本文

`&&' あるいは `||' 演算子の右オペランドに副作用があります。

6.437.2 内容

&& 演算子および || 演算子は短絡評価の方式で処理されます。 したがって、これらの右オペランドに副作用を含む式がある場合、 その副作用の有無が左オペランドに依存することになります。 これは非常に紛らわしく、バグが入り込む可能性を高めます。

6.437.3 サンプルコード

if ((a == b) && ((c = func()) == d)) /* W0508 */

c には、 a==b の評価が真の場合にのみ func() の戻り値が代入されます。

6.437.4 関連メッセージ

なし。

6.437.5 対応バージョン

1.0.0


Next: , Previous: W0508, Up: Messages

6.438 W0511

6.438.1 メッセージ本文

C++ コメント `//' が使われています。

6.438.2 内容

// コメントは ISO C90 で規定されておらず、言語拡張に該当します。言語拡張を使用すると移植性が低下します。

6.438.3 サンプルコード

// W0511

6.438.4 関連メッセージ

なし。

6.438.5 対応バージョン

1.0.0


Next: , Previous: W0511, Up: Messages

6.439 W0512

6.439.1 メッセージ本文

`++' あるいは `–' 演算子の結果が式の中で使われています。

6.439.2 内容

このような式では ++ 演算子や -- 演算子の評価順の認識誤りがあれば、意図しない結果になる可能性が高いです。 見た目にも複雑な式になり、理解が困難かつ誤った理解をしやすいなどのデメリットもあります。

6.439.3 サンプルコード

a = b++ + --c + d++; /* W0512 */

6.439.4 関連メッセージ

なし。

6.439.5 対応バージョン

1.0.0


Next: , Previous: W0512, Up: Messages

6.440 W0525

6.440.1 メッセージ本文

1 ビットの名前が付いたフィールドが符号付き型として宣言されています。

6.440.2 内容

1 ビットの符号付ビットフィールドで表すことができるのは "-1" と "0" のみで、"1" を表すことはできません。 このようなビットフィールドは用途が考えづらく、理解が困難です。

6.440.3 サンプルコード

struct ST {
    int bit:1; /* W0525 */
};

6.440.4 関連メッセージ

なし。

6.440.5 対応バージョン

1.0.0


Next: , Previous: W0525, Up: Messages

6.441 W0528

6.441.1 メッセージ本文

このマクロは、8 進数定数を定義しています。

6.441.2 内容

0 で始まる定数は 8 進数として解釈されます。 10 進数と比べて紛らわしいです。

6.441.3 サンプルコード

#define MACRO 0123 /* W0528 */

6.441.4 関連メッセージ

6.441.5 対応バージョン

1.0.0


Next: , Previous: W0528, Up: Messages

6.442 W0529

6.442.1 メッセージ本文

8 進数リテラルが使われています。

6.442.2 内容

0 で始まる定数は 8 進数として解釈されます。 10 進数と比べて紛らわしいです。

6.442.3 サンプルコード

#define MACRO 0123

int a = 0123; /* W0529 */
int b = MACRO; /* W0529 */

6.442.4 関連メッセージ

6.442.5 対応バージョン

1.0.0


Next: , Previous: W0529, Up: Messages

6.443 W0530

6.443.1 メッセージ本文

文字定数または文字列リテラルの中で、8 進拡張表記が使われています。

6.443.2 内容

0 で始まる定数は 8 進数として解釈されます。 10 進数と比べて紛らわしいです。

6.443.3 サンプルコード

char *s = "\012"; /* W0530 */

6.443.4 関連メッセージ

6.443.5 対応バージョン

1.0.0


Next: , Previous: W0530, Up: Messages

6.444 W0532

6.444.1 メッセージ本文

switch 文の case 節、default 節から出るために break 文が使われていますが、case 節の末尾に記述されていません。

6.444.2 内容

break 文は、case 文内の末尾でのみ使用されるべきです。

6.444.3 サンプルコード

switch (x) {
case 1:
    if (y == 0) {
        break; /* W0532 */
    }
    ...snip...
    break;
case 2:
    ...snip...
    break;
}

6.444.4 関連メッセージ

なし。

6.444.5 対応バージョン

1.0.0


Next: , Previous: W0532, Up: Messages

6.445 W0534

6.445.1 メッセージ本文

制御変数 `%s' は、この for 文制御式で初期化されていません。

6.445.2 内容

ループ制御変数は必ずしも for 文の初期化式の中で初期化しないといけないわけではありません。 しかし、for 文以前のどこかから初期化文を探すよりも、for 文の初期化式に初期化文が書いている方がわかりやすいといえます。

6.445.3 サンプルコード

int i = 0;
int j;

for (; i < 10; i++) { /* W0534 */
}

for (j = 0; i < 20; i++) { /* W0534 */
}

6.445.4 関連メッセージ

なし。

6.445.5 対応バージョン

1.0.0


Next: , Previous: W0534, Up: Messages

6.446 W0535

6.446.1 メッセージ本文

for 文の制御式の中にカンマ演算子が使われています。

6.446.2 内容

for 文におけるカンマ演算子の使用は、for 文以外での使用よりはデメリットが少ないと言えます。 しかし、程度は小さいながらも解析性を低下させることに変わりはありません。

6.446.3 サンプルコード

int i, j, k = 0;

for (i = 0, j = 0; i < 10; i++, j++, k--) { /* W0535 */
}

6.446.4 関連メッセージ

なし。

6.446.5 対応バージョン

1.0.0


Next: , Previous: W0535, Up: Messages

6.447 W0538

6.447.1 メッセージ本文

この default ラベルは、switch 文内の最後のラベルではありません。

6.447.2 内容

switch 文において default 節が末尾でない場合、その節以降の case 節が判定されません。 これは、ほどんどの場合プログラマの意図ではないと想定されます。

6.447.3 サンプルコード

switch (x) {
default: /* W0538 */
    ...snip...
case 1:
    ...snip...
}

6.447.4 関連メッセージ

なし。

6.447.5 対応バージョン

1.0.0


Next: , Previous: W0538, Up: Messages

6.448 W0540

6.448.1 メッセージ本文

空の仮引数並びの関数が定義されています。`void' が省略されています。

6.448.2 内容

引数を持たない関数定義で void を使用しない書き方は、古い形式の関数定義と見なされ、意図しない動作を引き起こす可能性があります。

6.448.3 サンプルコード

void func() /* W0540 */
{
    ...snip...
}

6.448.4 関連メッセージ

なし。

6.448.5 対応バージョン

1.0.0


Next: , Previous: W0540, Up: Messages

6.449 W0541

6.449.1 メッセージ本文

マクロで隠蔽されないインラインアセンブリコードです。

6.449.2 内容

アセンブラコードは環境によって変わるため、複数の関数に点在させると、別の環境に移植するときの変更コストが大きくなります。

6.449.3 サンプルコード

#define ASM_CODE asm("movl %ecx, %eax")

void foo(int arg1, int *arg2, int arg3)
{
    asm("movl %ecx, %eax"); /* W0541 */
    __asm__("movl %ecx, (%eax)"); /* W0541 */

    asm { /* W0541 */
        xorl eax, eax
    }

    ASM_CODE; /* OK */

    __asm__ volatile ( /* W0541 */
            "int $0x80"
            : "=a" (r)
              "+b" (arg1),
              "+c" (arg2),
              "+d" (arg3)
            : "a" (128)
            : "memory", "cc");
}

6.449.4 関連メッセージ

なし。

6.449.5 対応バージョン

1.6.0


Next: , Previous: W0541, Up: Messages

6.450 W0542

6.450.1 メッセージ本文

関数宣言の仮引数の一部にのみ識別子が存在します。

6.450.2 内容

関数定義の仮引数名が対応する宣言の仮引数名と異なる場合、その関数の仕様変更が未完了となる可能性があります。

6.450.3 サンプルコード

void func(int i, char, int, char c); /* W0542 */

6.450.4 関連メッセージ

なし。

6.450.5 対応バージョン

1.0.0


Next: , Previous: W0542, Up: Messages

6.451 W0543

6.451.1 メッセージ本文

この関数宣言における仮引数の識別子は、以前の宣言の仮引数の識別子と異なります。

6.451.2 内容

関数定義の仮引数名が対応する宣言の仮引数名と異なる場合、その関数の仕様変更が未完了となる可能性があります。

6.451.3 サンプルコード

void func(int i1, int i2);

void func(int i2, int i1) /* W0543 */
{
    ...snip...
}

6.451.4 関連メッセージ

6.451.5 対応バージョン

1.0.0


Next: , Previous: W0543, Up: Messages

6.452 W0544

6.452.1 メッセージ本文

関数宣言の仮引数の識別子と関数ポインタの宣言の仮引数の識別子が異なります。

6.452.2 内容

関数定義の仮引数名が対応する宣言の仮引数名と異なる場合、その関数の仕様変更が未完了となる可能性があります。

6.452.3 サンプルコード

void func(int i1, int i2);
void (*p)(int i2, int i1) = &func; /* W0544 */

6.452.4 関連メッセージ

6.452.5 対応バージョン

1.0.0


Next: , Previous: W0544, Up: Messages

6.453 W0546

6.453.1 メッセージ本文

switch 文の case ラベルあるいは default ラベルが、ネストされたブロックの中に存在します。

6.453.2 内容

switch 文中の入れ子ブロックの中に case 節や default 節を記述することは可能ですが、文が複雑になります。 また、入れ子ブロックが条件文になっている場合には構造化定理の側面から見ても怪しいものになってしまいます。

6.453.3 サンプルコード

switch (x) {
case 1:
    if (y > 0) {
    case 2: /* W0546 */
        break;
    }
    ...snip...
    break;
default:
    ...snip...
}

6.453.4 関連メッセージ

なし。

6.453.5 対応バージョン

1.0.0


Next: , Previous: W0546, Up: Messages

6.454 W0549

6.454.1 メッセージ本文

マクロの仮引数が `()' で囲まれていません。

6.454.2 内容

マクロ仮引数が式である場合に、演算子の優先順位に関して問題が生じる可能性があります。

6.454.3 サンプルコード

#define ADD(a, b) a + b /* W0549 */

int x = 3 * ADD(1, 2);

上記コードでは、 3 * (1 + 2) = 9 ではなく、(3 * 1) + 2 = 5 が x に代入されます。

6.454.4 関連メッセージ

なし。

6.454.5 対応バージョン

1.0.0


Next: , Previous: W0549, Up: Messages

6.455 W0551

6.455.1 メッセージ本文

共用体型指定子が定義されています。

6.455.2 内容

共用体では、メンバがどのような順番でメモリに配置されるかが環境依存になります。従って、移植性が低下します。

6.455.3 サンプルコード

union UNI { /* W0551 */
    int a;
    short b;
    long c;
};

6.455.4 関連メッセージ

6.455.5 対応バージョン

1.0.0


Next: , Previous: W0551, Up: Messages

6.456 W0552

6.456.1 メッセージ本文

共用体型のオブジェクトが定義されています。

6.456.2 内容

共用体では、メンバがどのような順番でメモリに配置されるかが環境依存になります。従って、移植性が低下します。

6.456.3 サンプルコード

union UNI {
    int a;
    short b;
    long c;
};

union UNI u; /* W0552 */

6.456.4 関連メッセージ

6.456.5 対応バージョン

1.0.0


Next: , Previous: W0552, Up: Messages

6.457 W0553

6.457.1 メッセージ本文

関数を指すポインタが、異なる関数ポインタ型へキャストされています。

6.457.2 内容

異なる関数ポインタ型へのキャストを使用しても問題ない処理系が多いですが、中には関数ポインタのキャストを実施した時点でアボートするような処理系も存在します。

6.457.3 サンプルコード

extern int func(void);

void (*p)(int) = (void (*)(int)) &func; /* W0553 */

6.457.4 関連メッセージ

なし。

6.457.5 対応バージョン

1.0.0


Next: , Previous: W0553, Up: Messages

6.458 W0554

6.458.1 メッセージ本文

`#pragma' の実引数 `%s' は認識できません。この `#pragma' 指令は無視されました。

6.458.2 内容

#pragma ディレクティブで実行できる命令の内容や種類は処理系依存になります。従って、#pragma ディレクティブを使用するだけで移植性が低下します。

6.458.3 サンプルコード

#pragma SystemSpecificPragmaName 5 /* W0544 */

6.458.4 関連メッセージ

なし。

6.458.5 対応バージョン

1.0.0


Next: , Previous: W0554, Up: Messages

6.459 W0555

6.459.1 メッセージ本文

この関数はプロジェクト中で間接的に再帰呼び出しされています。

6.459.2 内容

再帰関数は、効率性の面で「処理が遅くなる」、「スタックを想定以上に使用してしまう可能性がある」などのデメリットがあります。 また、無限ループに陥る可能性があるため危険だという側面もあります。

6.459.3 サンプルコード

test1.c

int func1(int i) /* W0555 */
{
    if (i < 10) {
        return i + 1;
    }
    else {
        return func3(i);
    }
}

test2.c

int func2(int i) /* W0555 */
{
    return func1(i) + 2;
}

test3.c

int func3(int i) /* W0555 */
{
    return func2(i) + 3;
}

6.459.4 関連メッセージ

6.459.5 対応バージョン

1.0.0


Next: , Previous: W0555, Up: Messages

6.460 W0556

6.460.1 メッセージ本文

この呼び出しを含む関数は、再帰呼び出しされています。

6.460.2 内容

再帰関数は、効率性の面で、「処理が遅くなる」、「スタックを想定以上に使用してしまう可能性がある」、などのデメリットがあります。 また、無限ループに陥る可能性があるため危険だという側面もあります。

6.460.3 サンプルコード

int func(int i)
{
    if (i == 0) {
        return 0;
    }
    else {
        return func(i - 1); /* W0556 */
    }
}

6.460.4 関連メッセージ

6.460.5 対応バージョン

1.0.0


Next: , Previous: W0556, Up: Messages

6.461 W0559

6.461.1 メッセージ本文

`!' 演算子のオペランドが算術演算あるいはビット演算の式になっています。

6.461.2 内容

正しい単項演算子の使い方をしていません。ビット単位の論理積 `&' または論理和 `|' を使用すべきです。

6.461.3 サンプルコード

int func(int a, int b)
{
    if (!(a || b)) {
        return 0;
    }
    else {
        return !(a & b); /* W0559 */
    }
}

6.461.4 関連メッセージ

6.461.5 対応バージョン

1.0.0


Next: , Previous: W0559, Up: Messages

6.462 W0560

6.462.1 メッセージ本文

`~' 演算子のオペランドがブール型式になっています。

6.462.2 内容

正しい単項演算子の使い方をしていません。論理否定演算子 `!' を使用すべきです。

6.462.3 サンプルコード

int func(int a, int b)
{
    return ~((a < b) && (b > 0)); /* W0560 */
}

6.462.4 関連メッセージ

6.462.5 対応バージョン

1.0.0


Next: , Previous: W0560, Up: Messages

6.463 W0561

6.463.1 メッセージ本文

`*p++' の意味は、`(*p)++' ではなく、`*(p++)' です。`*' 演算子は冗長です。

6.463.2 内容

プログラムの動作に寄与しない文の具体例としてサンプルコードの例が挙げられます。 この文は *(p++) と同義になるため、p++ とした場合と処理結果は変わりません。 従って * 演算子が冗長といえます。冗長な記述が削除されずにコード中に残ることで解析性が低下します。

6.463.3 サンプルコード

*p++; /* W0561 */

6.463.4 関連メッセージ

なし。

6.463.5 対応バージョン

1.0.0


Next: , Previous: W0561, Up: Messages

6.464 W0562

6.464.1 メッセージ本文

初期化子の中に余分な `{}' があります。

6.464.2 内容

ここでの余分な波括弧とは、配列の初期化子でいうとサンプルコードの配列 ng における外側から一つ内側にある波括弧です。 このような波括弧は冗長であり、配列要素の数を変えるときなどに修正ミスを生じやすくさせます。

6.464.3 サンプルコード

int ng[3][2] = { { {1, 2}, { 3, 4}, { 5, 6 } } }; /* W0562 */

int ok[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } }; /* OK */

6.464.4 関連メッセージ

なし。

6.464.5 対応バージョン

1.0.0


Next: , Previous: W0562, Up: Messages

6.465 W0563

6.465.1 メッセージ本文

このブロックの外側からラベル `%s' へジャンプした場合、ローカル変数は初期化されません。

6.465.2 内容

不定値を使うことで予期しない動作を引き起こす可能性があります。

6.465.3 サンプルコード

void func(int a, int b)
{
    if (a == 0) {
        if (b != 0) {
            goto ERR;
        }
    }
    else {
        int c = 0;
    ERR:  /* W0563 */
        b = c;
    }
}

6.465.4 関連メッセージ

6.465.5 対応バージョン

1.0.0


Next: , Previous: W0563, Up: Messages

6.466 W0564

6.466.1 メッセージ本文

この goto 文がラベル `%s' へジャンプした場合、ローカル変数は初期化されません。

6.466.2 内容

不定値を使うことで予期しない動作を引き起こす可能性があります。

6.466.3 サンプルコード

void func(int a, int b)
{
    if (a == 0) {
        int c = 0;
    RETRY:
        b = c;
    }

    if (b != 0) {
        goto RETRY; /* W0564 */
    }
}

6.466.4 関連メッセージ

6.466.5 対応バージョン

1.0.0


Next: , Previous: W0564, Up: Messages

6.467 W0565

6.467.1 メッセージ本文

汎整数型を volatile ポインタ型(あるいはその逆)へキャストしています。

6.467.2 内容

このようなキャストの動作は処理系定義のため移植性が低下します。

6.467.3 サンプルコード

unsigned int a = 0xFFFFU;
volatile unsigned int *b = (volatile unsigned int *) a; /* W0565 */
unsigned int c = (unsigned int) b; /* W0565 */

6.467.4 関連メッセージ

6.467.5 対応バージョン

1.0.0


Next: , Previous: W0565, Up: Messages

6.468 W0566

6.468.1 メッセージ本文

汎整数型を関数ポインタ型(またはその逆)へキャストしています。

6.468.2 内容

このようなキャストの動作は処理系定義のため移植性が低下します。

6.468.3 サンプルコード

unsigned int addr = 0xFFFFFFFFU;
void (*p)(int, long) = (void (*)(int, long)) addr; /* W0566 */
int i = (int) p; /* W0566 */

6.468.4 関連メッセージ

6.468.5 対応バージョン

1.0.0


Next: , Previous: W0566, Up: Messages

6.469 W0567

6.469.1 メッセージ本文

汎整数型をオブジェクトを指すポインタ(あるいはその逆)へキャストしています。

6.469.2 内容

このようなキャストの動作は処理系定義のため移植性が低下します。

6.469.3 サンプルコード

unsigned int addr = 0xFFFFFFFFU;
void (*p)(int, long) = (void (*)(int, long)) addr; /* W0567 */
int i = (int) p; /* W0567 */

6.469.4 関連メッセージ

6.469.5 対応バージョン

1.0.0


Next: , Previous: W0567, Up: Messages

6.470 W0568

6.470.1 メッセージ本文

符号付き定数式の値を左シフト演算した結果は、未定義になります。

6.470.2 内容

このようなシフト演算は処理系定義のため移植性が低下します。

6.470.3 サンプルコード

int a = 0x7FFFFFFF << 1; /* W0568 */
int b = -5 << 1; /* W0568 */

6.470.4 関連メッセージ

6.470.5 対応バージョン

1.0.0


Next: , Previous: W0568, Up: Messages

6.471 W0569

6.471.1 メッセージ本文

符号付きの式の値を左シフト演算した結果は、未定義になります。

6.471.2 内容

このようなシフト演算は処理系定義のため移植性が低下します。

6.471.3 サンプルコード

int func(int a)
{
    if (a >= 0x40000000) {
        return a << 1; /* W0569 */
    }

    if (a < 0) {
        return a << 1; /* W0569 */
    }

    return a << 1;
}

6.471.4 関連メッセージ

6.471.5 対応バージョン

1.0.0


Next: , Previous: W0569, Up: Messages

6.472 W0570

6.472.1 メッセージ本文

符号付きの式の値を左シフト演算した結果は、未定義になることがあります。

6.472.2 内容

このようなシフト演算は処理系定義のため移植性が低下します。

6.472.3 サンプルコード

int func(int a)
{
    if (a >= 0x10000000) {
        return a << 1; /* W0570 */
    }

    if (a < 10) {
        return a << 1; /* W0570 */
    }

    return a << 1;
}

6.472.4 関連メッセージ

6.472.5 対応バージョン

1.0.0


Next: , Previous: W0570, Up: Messages

6.473 W0571

6.473.1 メッセージ本文

符号付きデータの右シフト演算には、処理系によって論理シフトと算術シフトの両方の可能性があります。

6.473.2 内容

このような符号付き型の演算は、符号ビットがゼロになる(論理シフト)場合と符号ビットを複製したものに置き換わる(算術シフト)場合があり、 どちらになるかは処理系定義のため移植性が低下します。

6.473.3 サンプルコード

int func(int a)
{
    return a >> 3; /* W0571 */
}

6.473.4 関連メッセージ

6.473.5 対応バージョン

1.0.0


Next: , Previous: W0571, Up: Messages

6.474 W0572

6.474.1 メッセージ本文

符号付きのデータに対するビット演算は処理系定義の結果になります。

6.474.2 内容

このような符号付き型の演算は、符号ビットがゼロになる(論理シフト)場合と符号ビットを複製したものに置き換わる(算術シフト)場合があり、 どちらになるかは処理系定義のため移植性が低下します。

6.474.3 サンプルコード

void func(short a)
{
    short b;

    b = a >> 8; /* W0572 */
    b <<= 1; /* W0572 */
    b = a & 15; /* W0572 */
    b = a | 15; /* W0572 */
    b = a ^ 15; /* W0572 */
    b = ~a; /* W0572 */
}

6.474.4 関連メッセージ

6.474.5 対応バージョン

1.0.0


Next: , Previous: W0572, Up: Messages

6.475 W0573

6.475.1 メッセージ本文

`[]' 内の走査セットの `-' 文字は、処理系定義になります。

6.475.2 内容

このような変換指定子の動作は処理系定義のため移植性が低下します。

6.475.3 サンプルコード

char c;
scanf("%[a-z]", &c); /* W0573 */

6.475.4 関連メッセージ

なし。

6.475.5 対応バージョン

1.6.0


Next: , Previous: W0573, Up: Messages

6.476 W0574

6.476.1 メッセージ本文

基本ソース文字集合に含まれない文字が、文字定数の中で使われています。

6.476.2 内容

基本ソース文字集合以外の文字の処理は処理系定義のため移植性が低下します。

6.476.3 サンプルコード

const char c = '$'; /* W0574 */

6.476.4 関連メッセージ

6.476.5 対応バージョン

1.0.0


Next: , Previous: W0574, Up: Messages

6.477 W0575

6.477.1 メッセージ本文

基本ソース文字集合に含まれない文字が、文字列リテラルの中で使われています。

6.477.2 内容

基本ソース文字集合以外の文字の処理は処理系定義のため移植性が低下します。

6.477.3 サンプルコード

const char *str = "@$"; /* W0575 */

6.477.4 関連メッセージ

6.477.5 対応バージョン

1.0.0


Next: , Previous: W0575, Up: Messages

6.478 W0576

6.478.1 メッセージ本文

基本ソース文字集合に含まれない文字が、ソースファイル `%s' のコメントの中で使われています。

6.478.2 内容

基本ソース文字集合以外の文字の処理は処理系定義のため移植性が低下します。

6.478.3 サンプルコード

/* $ W0576 */

6.478.4 関連メッセージ

6.478.5 対応バージョン

1.0.0


Next: , Previous: W0576, Up: Messages

6.479 W0577

6.479.1 メッセージ本文

基本ソース文字集合に含まれない文字が、ソースファイル `%s' のこの前処理指令の中で使われています。

6.479.2 内容

基本ソース文字集合以外の文字の処理は処理系定義のため移植性が低下します。

6.479.3 サンプルコード

#define MACRO $ /* W0577 */

6.479.4 関連メッセージ

6.479.5 対応バージョン

1.0.0


Next: , Previous: W0577, Up: Messages

6.480 W0578

6.480.1 メッセージ本文

暗黙的に汎整数型 `%s' の複合式からより大きな型 `%s' に型変換されています。

6.480.2 内容

サンプルコードの関数では int 型変数 a の 2 乗した値が int 型の範囲に収まらないことを想定して long 型変数 b へ代入しています。 しかし、環境によっては a * a の演算はいったん int 型として結果を出したあとに b へ代入される場合があります。その場合、a の値によっては情報の損失が起こります。

6.480.3 サンプルコード

void func(int a)
{
    long b = a * a; /* W0578 */
}

6.480.4 関連メッセージ

なし。

6.480.5 対応バージョン

1.0.0


Next: , Previous: W0578, Up: Messages

6.481 W0579

6.481.1 メッセージ本文

汎整数型 `%s' の複合式を、より大きな型 `%s' にキャストしています。

6.481.2 内容

サンプルコードの関数では int 型変数 a の 2 乗した値が int 型の範囲に収まらないことを想定して long 型変数 b へ代入しています。 しかし、環境によっては a * a の演算はいったん int 型として結果を出したあとに b へ代入される場合があります。その場合、a の値によっては情報の損失が起こります。

6.481.3 サンプルコード

void func(int a)
{
    long b = (long) (a * a); /* W0579 */
}

6.481.4 関連メッセージ

なし。

6.481.5 対応バージョン

1.6.0


Next: , Previous: W0579, Up: Messages

6.482 W0580

6.482.1 メッセージ本文

ローカルな静的変数のアドレスが、より長い寿命を持つポインタに代入されています。

6.482.2 内容

ローカルで static な変数のアドレスが、結合またはより広いスコープを持つポインタに代入されています。 静的記憶域期間を持つため、危険ではありませんが、データ隠蔽の原則に反します。

6.482.3 サンプルコード

int *p;

void func(void)
{
    static int i = 0;

    p = &i; /* W0580 */
}

6.482.4 関連メッセージ

なし。

6.482.5 対応バージョン

1.0.0


Next: , Previous: W0580, Up: Messages

6.483 W0581

6.483.1 メッセージ本文

実引数の個数か型が、この関数の以前の使用時と異なります。

6.483.2 内容

足りない引数がある場合は補われますが、値は不定になります。 従って、その不定値を使用する部分の処理に不具合が生じる危険性が高いといえます。

6.483.3 サンプルコード

int func(int a, short b, long c)
{
    switch (a) {
    case 0:
        return foo(a, b, c);
    case 1:
        return foo(a, c, b); /* W0581 */
    default:
        return foo(b, c); /* W0581 */
    }
}

6.483.4 関連メッセージ

6.483.5 対応バージョン

1.0.0


Next: , Previous: W0581, Up: Messages

6.484 W0582

6.484.1 メッセージ本文

実引数の個数か型が、この後で見つかる関数プロトタイプ宣言と異なります。

6.484.2 内容

足りない引数がある場合は補われますが、値は不定になります。 従って、その不定値を使用する部分の処理に不具合が生じる危険性が高いといえます。

6.484.3 サンプルコード

int func(int a, short b, long c)
{
    switch (a) {
    case 0:
        return foo(a, b, c);
    case 1:
        return foo(a, c, b); /* W0582 */
    default:
        return foo(b, c); /* W0582 */
    }
}

extern int foo(int, short, long);

6.484.4 関連メッセージ

6.484.5 対応バージョン

1.0.0


Next: , Previous: W0582, Up: Messages

6.485 W0583

6.485.1 メッセージ本文

実引数の個数か型が、この後で見つかる関数定義と異なります。

6.485.2 内容

足りない引数がある場合は補われますが、値は不定になります。 従って、その不定値を使用する部分の処理に不具合が生じる危険性が高いといえます。

6.485.3 サンプルコード

int func(int a, short b, long c)
{
    switch (a) {
    case 0:
        return foo(a, b, c);
    case 1:
        return foo(a, c, b); /* W0583 */
    default:
        return foo(b, c); /* W0583 */
    }
}

int foo(int a, short b, long c)
{
    return a + b + c;
}

6.485.4 関連メッセージ

6.485.5 対応バージョン

1.0.0


Next: , Previous: W0583, Up: Messages

6.486 W0584

6.486.1 メッセージ本文

%s 番目の実引数の型が、関数定義の中の仮引数の型と異なります。

6.486.2 内容

実引数の型と仮引数の型が異なる場合、値が暗黙的に変換されます。

6.486.3 サンプルコード

extern void func1(a, b)
long a;
double b;
{
    ...snip...
}

void func2(void)
{
    int a = 0;
    long b = 0;

    func1(a, b); /* W0584 */
}

6.486.4 関連メッセージ

6.486.5 対応バージョン

1.0.0


Next: , Previous: W0584, Up: Messages

6.487 W0585

6.487.1 メッセージ本文

制御変数 `%s' はインクリメント式に現れません。

6.487.2 内容

ループ変数の増分を増分式で行わずにループ本体中で行うとループの仕様がわかりにくくなります。

6.487.3 サンプルコード

int i, j;

for (i = j = 0; i < 10; j++) { /* W0585 */
    i++;
}

6.487.4 関連メッセージ

なし。

6.487.5 対応バージョン

1.0.0


Next: , Previous: W0585, Up: Messages

6.488 W0586

6.488.1 メッセージ本文

typedef`%s' が二つ以上の場所で宣言されています。

6.488.2 内容

typedef 名はリンケージを持ちません。同一の typedef を複数宣言しても、それらの typedef 名は別物として扱われます。 これは非常に紛らわしく、コードの可読性を低下させます。

6.488.3 サンプルコード

test1.c

typedef int *INT_PTR; /* W0586 */

void func1(INT_PTR)
{
    ...snip...
}

test2.c

typedef int *INT_PTR; /* W0586 */

void func2(INT_PTR)
{
    ...snip...
}

6.488.4 関連メッセージ

なし。

6.488.5 対応バージョン

1.0.0


Next: , Previous: W0586, Up: Messages

6.489 W0589

6.489.1 メッセージ本文

オブジェクト `%s' は、定義されている翻訳単位の内の、関数 `%s' のみから参照されています。

6.489.2 内容

グローバルな可視性を持ちながら、局所的な参照をされています。グローバルなオブジェクトの数が多いと、プログラム全体を理解する場合の可読性が減少します。

6.489.3 サンプルコード

test1.c

void func1(void) /* W0589 & W0591 */
{
    ...snip...
}

void func2(void)
{
    func1();
}

test2.c

extern void func2(void);

void func3(void)
{
    func2();
}

6.489.4 関連メッセージ

なし。

6.489.5 対応バージョン

1.0.0


Next: , Previous: W0589, Up: Messages

6.490 W0591

6.490.1 メッセージ本文

関数 `%s' は、定義されている翻訳単位の内でのみ参照されています。

6.490.2 内容

グローバルな関数の数が多いと、プログラム全体を理解する場合の可読性が減少します。

6.490.3 サンプルコード

test1.c

void func1(void) /* W0589 & W0591 */
{
    ...snip...
}

void func2(void)
{
    func1();
}

test2.c

extern void func2(void);

void func3(void)
{
    func2();
}

6.490.4 関連メッセージ

なし。

6.490.5 対応バージョン

1.0.0


Next: , Previous: W0591, Up: Messages

6.491 W0593

6.491.1 メッセージ本文

オブジェクト `%s' は、定義されている翻訳単位の中でのみ参照されています。

6.491.2 内容

グローバルなオブジェクトの数が多いと、プログラム全体を理解する場合の可読性が減少します。

6.491.3 サンプルコード

test1.c

int a = 100; /* W0593 */

void func1(void)
{
    a += 1;
}

void func2(void)
{
    func1();
    a += 2;
}

test2.c

extern void func2(void);

void func3(void)
{
    func2();
}

6.491.4 関連メッセージ

なし。

6.491.5 対応バージョン

1.0.0


Next: , Previous: W0593, Up: Messages

6.492 W0597

6.492.1 メッセージ本文

副作用完了点の間で `%s' が二回以上変更されています。評価順序は未定義です。

6.492.2 内容

同一の変数が副作用完了点の間に 2 度以上アクセスされた場合、その評価順序は ISO 規格では未定義のため、予期しない動作が生じる可能性があります。

6.492.3 サンプルコード

extern int bar(int *);
extern int baz(const int *);

void foo(int a, int b)
{
    a = b * a++; /* W0597 */
    a = bar(&a) * a++; /* W0597 */
    b = bar(&a) * (a++ + --a); /* W0597, W0599 */
}

6.492.4 関連メッセージ

6.492.5 対応バージョン

1.2.0


Next: , Previous: W0597, Up: Messages

6.493 W0598

6.493.1 メッセージ本文

副作用完了点の間で `%s' が二回以上変更される可能性があります。評価順序は未定義です。

6.493.2 内容

同一の変数が副作用完了点の間に 2 度以上アクセスされた場合、その評価順序は ISO 規格では未定義のため、予期しない動作が生じる可能性があります。

6.493.3 サンプルコード

extern int bar(int *);
extern int baz(const int *);

void foo(int a, int b)
{
    b = bar(&a) * a++; /* W0598 */
    b = bar(&a) + bar(&a); /* W0598 */
    b = bar(&a) + baz(&a); /* W0600 */
    b = baz(&a) + baz(&a);
}

6.493.4 関連メッセージ

6.493.5 対応バージョン

1.2.0


Next: , Previous: W0598, Up: Messages

6.494 W0599

6.494.1 メッセージ本文

副作用完了点の間で `%s' が変えられ、参照されています。評価順序は未定義です。

6.494.2 内容

同一の変数が副作用完了点の間に 2 度以上アクセスされた場合、その評価順序は ISO 規格では未定義のため、予期しない動作が生じる可能性があります。

6.494.3 サンプルコード

extern void bar(int, int, int);

void foo(int a, int b, int *c)
{
    b = (a + 1) + a++; /* W0599 */
    b = c[a] + c[++a]; /* W0599 */
    bar(a, a++, c[a]); /* W0599 */
    bar(a, a, c[a++]); /* W0599 */
    a = a + b;
    c[a] = a++ + b; /* W0599 */
}

6.494.4 関連メッセージ

6.494.5 対応バージョン

1.2.0


Next: , Previous: W0599, Up: Messages

6.495 W0600

6.495.1 メッセージ本文

副作用完了点の間で `%s' が変えられ、参照される可能性があります。評価順序は未定義です。

6.495.2 内容

同一の変数が副作用完了点の間に 2 度以上アクセスされた場合、その評価順序は ISO 規格では未定義のため、予期しない動作が生じる可能性があります。

6.495.3 サンプルコード

extern int bar(int *);
extern int baz(const int *);

void foo(int a, int b)
{
    b = bar(&a) * a; /* W0600 */
    b = baz(&a) * a;
}

6.495.4 関連メッセージ

6.495.5 対応バージョン

1.2.0


Next: , Previous: W0600, Up: Messages

6.496 W0605

6.496.1 メッセージ本文

繰り返し文を終了させる目的で、break 文が二つ以上使用されています。

6.496.2 内容

繰り返し文で複数の break 文が使用されている場合、コードの構造が複雑になり、 構造化定理(「順次」「反復」「分岐」)に基づいたコードで実現できる保守性に関するメリットを損ないます。

6.496.3 サンプルコード

while (n > 0) {
    if (n == 1) {
        break;
    }

    if (n == 2) {
        break; /* W0605 */
    }
}

6.496.4 関連メッセージ

なし。

6.496.5 対応バージョン

1.0.0


Next: , Previous: W0605, Up: Messages

6.497 W0606

6.497.1 メッセージ本文

共用体に浮動小数点型のメンバがあります。

6.497.2 内容

浮動小数点型のメンバ変数に対して共用体を使ってビット単位でアクセスする場合の動作はコンパイラ依存なので、移植性を低下させます。

6.497.3 サンプルコード

union UNI { /* W0606 */
    float a;
    int b;
};

6.497.4 関連メッセージ

なし。

6.497.5 対応バージョン

1.4.0


Next: , Previous: W0606, Up: Messages

6.498 W0607

6.498.1 メッセージ本文

値が負になる整数式が符号無し型に変換されています。

6.498.2 内容

明らかに負になることが明らかな整数は、負の数として扱われることが想定されます。 そのような値が符号無し型に変換されることで意図しない動作を引き起こす可能性があります。

6.498.3 サンプルコード

void func(int a)
{
    if (a < 0) {
        unsigned int b = (unsigned int) a; /* W0607 */
    }
}

6.498.4 関連メッセージ

6.498.5 対応バージョン

1.8.0


Next: , Previous: W0607, Up: Messages

6.499 W0608

6.499.1 メッセージ本文

値が負になることがありうる整数式が符号無し型に変換されています。

6.499.2 内容

明らかに負になることが明らかな整数は、負の数として扱われることが想定されます。 そのような値が符号無し型に変換されることで意図しない動作を引き起こす可能性があります。

6.499.3 サンプルコード

void fuu(int a)
{
    unsigned char b;

    if (a < 256) {
        b = (unsigned char) a; /* W0608 */
    }
}

6.499.4 関連メッセージ

6.499.5 対応バージョン

1.8.0


Next: , Previous: W0608, Up: Messages

6.500 W0609

6.500.1 メッセージ本文

この論理演算の結果は常に真になります。

6.500.2 内容

処理フローが意図通りであるか不明確で、混乱を招く可能性があります。 意図通りでない場合、コードの信頼性が疑われます。また、不必要な処理がある場合は、コードが冗長になります。

6.500.3 サンプルコード

void func(int a)
{
    if (a < 0) {
        if (a != 0) { /* W0609 */
            ...snip...
        }
    }
}

6.500.4 関連メッセージ

6.500.5 対応バージョン

1.0.0


Next: , Previous: W0609, Up: Messages

6.501 W0610

6.501.1 メッセージ本文

この論理演算の結果は常に偽になります。

6.501.2 内容

処理フローが意図通りであるか不明確で、混乱を招く可能性があります。 意図通りでない場合、コードの信頼性が疑われます。また、不必要な処理がある場合は、コードが冗長になります。

6.501.3 サンプルコード

void func(int a)
{
    if (a < 0) {
        if (a == 0) { /* W0610 */
        }
    }
}

6.501.4 関連メッセージ

6.501.5 対応バージョン

1.0.0


Next: , Previous: W0610, Up: Messages

6.502 W0611

6.502.1 メッセージ本文

この繰り返し文の制御式の値は常に真です。

6.502.2 内容

処理フローが意図通りであるか不明確で、混乱を招く可能性があります。 意図通りでない場合、コードの信頼性が疑われます。また、不必要な処理がある場合は、コードが冗長になります。

6.502.3 サンプルコード

void func(int a)
{
    if ( a > 0 ) {
        while (a != 0) { /* W0611 */
            ...snip...
        }
    }
}

6.502.4 関連メッセージ

6.502.5 対応バージョン

1.0.0


Next: , Previous: W0611, Up: Messages

6.503 W0612

6.503.1 メッセージ本文

この if 条件式の値は常に真です。

6.503.2 内容

処理フローが意図通りであるか不明確で、混乱を招く可能性があります。 意図通りでない場合、コードの信頼性が疑われます。また、不必要な処理がある場合は、コードが冗長になります。

6.503.3 サンプルコード

int i;

for (i = 0; i < 10; i++) {
    if (i < 20) { /* W0612 */
        ...snip...
    }
}

6.503.4 関連メッセージ

6.503.5 対応バージョン

1.0.0


Next: , Previous: W0612, Up: Messages

6.504 W0613

6.504.1 メッセージ本文

この制御式の値は常に偽になります。

6.504.2 内容

処理フローが意図通りであるか不明確で、混乱を招く可能性があります。 意図通りでない場合、コードの信頼性が疑われます。また、不必要な処理がある場合は、コードが冗長になります。

6.504.3 サンプルコード

int i;

for (i = 0; i < 10; i++) {
    if (i > 10) { /* W0613 */
        ...snip...
    }
}

6.504.4 関連メッセージ

6.504.5 対応バージョン

1.0.0


Next: , Previous: W0613, Up: Messages

6.505 W0614

6.505.1 メッセージ本文

この `do-while' 制御式の値は常に偽になります。繰り返し文の本体は一回のみ実行されます。

6.505.2 内容

処理フローが意図通りであるか不明確で、混乱を招く可能性があります。 意図通りでない場合、コードの信頼性が疑われます。 また、不必要な処理がある場合は、コードが冗長になります。

6.505.3 サンプルコード

void func(int a)
{
    if (a == 0) {
        do {
        } while (a > 0); /* W0614 */
    }
}

6.505.4 関連メッセージ

6.505.5 対応バージョン

1.0.0


Next: , Previous: W0614, Up: Messages

6.506 W0622

6.506.1 メッセージ本文

関数がブロックスコープ内で宣言されています。

6.506.2 内容

この関数は、ファイルスコープ内で宣言されるべきです。このような記述は解析性を低下させます。

6.506.3 サンプルコード

int func1(void)
{
    extern int func2(void); /* W0622 */
}

6.506.4 関連メッセージ

なし。

6.506.5 対応バージョン

1.0.0


Next: , Previous: W0622, Up: Messages

6.507 W0623

6.507.1 メッセージ本文

外部結合のオブジェクトが、ブロックスコープ内で宣言されています。

6.507.2 内容

このオブジェクトは、ファイルスコープ内で宣言されるべきです。このような記述は解析性を低下させます。

6.507.3 サンプルコード

int func(void)
{
    extern int i; /* W0623 */
}

6.507.4 関連メッセージ

なし。

6.507.5 対応バージョン

1.0.0


Next: , Previous: W0623, Up: Messages

6.508 W0624

6.508.1 メッセージ本文

#define あるいは #undef がブロックの中に存在します。

6.508.2 内容

#define、#undef は、ファイルスコープ内で宣言されるべきです。このような記述は解析性を低下させます。

6.508.3 サンプルコード

#define MACRO 0

int foo(void)
{
#if defined(MACRO)
#undef MACRO    /* W0624 */
#define MACRO 1 /* W0624 */
#endif

    return MACRO;
}

6.508.4 関連メッセージ

なし。

6.508.5 対応バージョン

1.0.0


Next: , Previous: W0624, Up: Messages

6.509 W0625

6.509.1 メッセージ本文

外部結合の定義または宣言の中で `%s' が使われていますが、その typedef がヘッダファイルの中で宣言されていません。

6.509.2 内容

typedef 宣言はヘッダファイル内でのみ行うべきです。このような記述は保守性を低下させます。

6.509.3 サンプルコード

typedef int *INT_PTR; /* W0625 */

extern INT_PTR func(void);

INT_PTR func(void)
{
    return 0;
}

6.509.4 関連メッセージ

なし。

6.509.5 対応バージョン

1.8.0


Next: , Previous: W0625, Up: Messages

6.510 W0626

6.510.1 メッセージ本文

ワイド文字またはワイド文字列リテラルが使われています。

6.510.2 内容

ワイド文字またはワイド文字列リテラルを使用するコードは実行環境のロケールに依存 することになります。

6.510.3 サンプルコード

const wchar_t a = L'あ'; /* W0626 */

6.510.4 関連メッセージ

なし。

6.510.5 対応バージョン

1.0.0


Next: , Previous: W0626, Up: Messages

6.511 W0627

6.511.1 メッセージ本文

一行に、空文(`;' だけの文)が、他のコードの後にあります。

6.511.2 内容

他の文と空文が 1 行で書かれている場合、空文の意図が不明確になります。

6.511.3 サンプルコード

if (0); /* W0627 */
{
    ...snip...
}

6.511.4 関連メッセージ

なし。

6.511.5 対応バージョン

1.0.0


Next: , Previous: W0627, Up: Messages

6.512 W0628

6.512.1 メッセージ本文

関数 `%s' が定義されていますが、このプロジェクトでは使われていません。

6.512.2 内容

使用されていない関数は無駄な要素といえます。コード中に無駄な要素があることで解析性が低下します。

6.512.3 サンプルコード

test1.c

int func1(void)
{
    return 0;
}

void func2(void) /* W0628 */
{
    ...snip...
}

test2.c

extern int func1(void);

int main(void)
{
    return func1();
}

6.512.4 関連メッセージ

6.512.5 対応バージョン

1.0.0


Next: , Previous: W0628, Up: Messages

6.513 W0629

6.513.1 メッセージ本文

static 関数 `%s()' は、この翻訳単位の中で使われていません。

6.513.2 内容

使用されていない関数は無駄な要素といえます。コード中に無駄な要素があることで解析性が低下します。

6.513.3 サンプルコード

static int func1(void) /* W0629 */
{
    return 1;
}

int func2(void)
{
    return 1;
}

6.513.4 関連メッセージ

6.513.5 対応バージョン

1.0.0


Next: , Previous: W0629, Up: Messages

6.514 W0632

6.514.1 メッセージ本文

`#include <%s>' の中で ' や " 文字を使うと、未定義の動作になります。

6.514.2 内容

`''、`"' または `/*' を #include 文で使用すると、未定義の動作になります。

6.514.3 サンプルコード

#include <NG'_header.h> /* W0632 */

6.514.4 関連メッセージ

6.514.5 対応バージョン

1.8.0


Next: , Previous: W0632, Up: Messages

6.515 W0633

6.515.1 メッセージ本文

`#include "%s"' の中で ' 文字を使うと、未定義の動作になります。

6.515.2 内容

`'' を #include 文で使用すると、未定義の動作になります。

6.515.3 サンプルコード

#include "NG'_header.h" /* W0633 */

6.515.4 関連メッセージ

6.515.5 対応バージョン

1.8.0


Next: , Previous: W0633, Up: Messages

6.516 W0634

6.516.1 メッセージ本文

`#include' 行の中で `\' を使っています。パス区切り文字としては `/' を勧めます。

6.516.2 内容

\ は PC 環境におけるパス区切り文字であり、#include 文で使用することで移植性を損ないます。

6.516.3 サンプルコード

#include "..\ng\header.h" /* W0634 */
#include "..\\ng\\header.h" /* W0634 */

6.516.4 関連メッセージ

6.516.5 対応バージョン

1.8.0


Next: , Previous: W0634, Up: Messages

6.517 W0635

6.517.1 メッセージ本文

%s 番目の変換指定子と、対応する実引数の型が合いません。

6.517.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.517.3 サンプルコード

void func(int a)
{
    printf("Apple %f\n", a); /* W0635 */
}

6.517.4 関連メッセージ

6.517.5 対応バージョン

1.0.0


Next: , Previous: W0635, Up: Messages

6.518 W0636

6.518.1 メッセージ本文

%s 番目の変換指定子に対応する実引数が存在しません。

6.518.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.518.3 サンプルコード

void func(int a, int b, int c)
{
    printf("Banana %d, %d, %d\n", a, b); /* W0636 */
}

6.518.4 関連メッセージ

6.518.5 対応バージョン

1.0.0


Next: , Previous: W0636, Up: Messages

6.519 W0637

6.519.1 メッセージ本文

関数呼び出しに、変換指定子の数よりも多くの実引数が存在します。

6.519.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.519.3 サンプルコード

void func(int a, int b)
{
    printf("Orange %d\n", a, b); /* W0637 */
}

6.519.4 関連メッセージ

6.519.5 対応バージョン

1.0.0


Next: , Previous: W0637, Up: Messages

6.520 W0638

6.520.1 メッセージ本文

この関数呼び出しには、少なくとも一つの実引数が必要です。

6.520.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.520.3 サンプルコード

printf(); /* W0638 */

6.520.4 関連メッセージ

6.520.5 対応バージョン

1.0.0


Next: , Previous: W0638, Up: Messages

6.521 W0639

6.521.1 メッセージ本文

%s 番目の変換指定子と、対応する実引数の型が合いません。

6.521.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.521.3 サンプルコード

int a;

scanf("%f",  &a); /* W0639 */

6.521.4 関連メッセージ

6.521.5 対応バージョン

1.0.0


Next: , Previous: W0639, Up: Messages

6.522 W0640

6.522.1 メッセージ本文

scanf 関数の実引数にはデータを格納するオブジェクトのポインタを渡さなければいけません。

6.522.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.522.3 サンプルコード

int a;

fscanf(stdin, "%d", a); /* W0640 */

6.522.4 関連メッセージ

6.522.5 対応バージョン

1.0.0


Next: , Previous: W0640, Up: Messages

6.523 W0641

6.523.1 メッセージ本文

浮動小数点数型をオブジェクトへのポインタ(あるいはその逆)へキャストしています。

6.523.2 内容

このようなキャストは未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.523.3 サンプルコード

int *foo(const float f)
{
    return (int *) f; /* W0641 */
}

6.523.4 関連メッセージ

なし。

6.523.5 対応バージョン

1.18.0


Next: , Previous: W0641, Up: Messages

6.524 W0642

6.524.1 メッセージ本文

register 指定で宣言されたオブジェクトのアドレスを得ることは不可能です。

6.524.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.524.3 サンプルコード

void func(void)
{
    register int a[3];

    int *p1 = a; /* W0642 */
    int *p2 = &a[1]; /* W0642 */
}

6.524.4 関連メッセージ

6.524.5 対応バージョン

1.8.0


Next: , Previous: W0642, Up: Messages

6.525 W0643

6.525.1 メッセージ本文

このマクロで構成された文字列リテラルは、`"' で囲まれていない不正な形式です。マクロ内の `#' 演算子が `\' が末尾にある実引数に適用された結果である可能性があります。

6.525.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.525.3 サンプルコード

#define MACRO(x) #x
const char *str = MACRO(foo\); /* W0643 */

6.525.4 関連メッセージ

6.525.5 対応バージョン

1.16.0


Next: , Previous: W0643, Up: Messages

6.526 W0644

6.526.1 メッセージ本文

void 式の値を使用しようとしています。void 式は値をもちません。

6.526.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.526.3 サンプルコード

extern void foo(void);

int bar(void)
{
    return (int) foo(); /* W0644 */
}

6.526.4 関連メッセージ

6.526.5 対応バージョン

1.18.0


Next: , Previous: W0644, Up: Messages

6.527 W0645

6.527.1 メッセージ本文

仮引数の型には、void 型を使うことができません。

6.527.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.527.3 サンプルコード

extern void func(a) /* W0645 */
void a;
{
}

6.527.4 関連メッセージ

6.527.5 対応バージョン

1.14.0


Next: , Previous: W0645, Up: Messages

6.528 W0646

6.528.1 メッセージ本文

通常の文字列リテラルとワイド文字列リテラルが隣接しています。

6.528.2 内容

未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.528.3 サンプルコード

static const char *str = "foo" L"bar"; /* W0646 */

6.528.4 関連メッセージ

6.528.5 対応バージョン

1.16.0


Next: , Previous: W0646, Up: Messages

6.529 W0649

6.529.1 メッセージ本文

シフト演算子の右オペランドの値が負の定数です。結果は未定義になります。

6.529.2 内容

このようなシフト演算は未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.529.3 サンプルコード

int foo(int i)
{
    return i << -1; /* W0649 */
}

6.529.4 関連メッセージ

6.529.5 対応バージョン

1.18.0


Next: , Previous: W0649, Up: Messages

6.530 W0650

6.530.1 メッセージ本文

シフト演算子の右オペランドの値が左オペランドの型 `%s' で表されるビット数に対して大きすぎます。結果は未定義になります。

6.530.2 内容

このようなシフト演算は未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.530.3 サンプルコード

unsigned int foo(unsigned int i)
{
    return i << 32; /* W0650 */
}

6.530.4 関連メッセージ

6.530.5 対応バージョン

1.18.0


Next: , Previous: W0650, Up: Messages

6.531 W0653

6.531.1 メッセージ本文

配列、構造体あるいは共用体の初期値が `{}' で囲まれていません。

6.531.2 内容

適合しない型の変数を用いて、構造体や共用体を初期化することは ISO C90 で未定義なので、 予期しない動作を引き起こす可能性があります。

6.531.3 サンプルコード

struct ST {
    int i;
};

int a[3] = 0; /* W0653 */
struct ST s = 0; /* W0653 */

6.531.4 関連メッセージ

6.531.5 対応バージョン

1.0.0


Next: , Previous: W0653, Up: Messages

6.532 W0654

6.532.1 メッセージ本文

構造体あるいは共用体の初期化子は、同じ構造体型あるいは共用体型の値でなければなりません。

6.532.2 内容

適合しない型の変数を用いて、構造体や共用体を初期化することは ISO C90 で未定義なので、 予期しない動作を引き起こす可能性があります。

6.532.3 サンプルコード

struct A {
    int i;
};

struct B {
    int j;
};

struct A a = { 0 };
struct B b = a; /* W0654 */

6.532.4 関連メッセージ

6.532.5 対応バージョン

1.0.0


Next: , Previous: W0654, Up: Messages

6.533 W0655

6.533.1 メッセージ本文

サイズが未定義のビットフィールド式です。

6.533.2 内容

ビットフィールド式に対して sizeof 演算子を使用することは無意味です。

6.533.3 サンプルコード

struct ST {
    unsigned int a:2;
    unsigned int b:4;
};

void func(void)
{
    struct ST s = { 0 };
    int i = sizeof(s.a); /* W0655 */
}

6.533.4 関連メッセージ

6.533.5 対応バージョン

1.0.0


Next: , Previous: W0655, Up: Messages

6.534 W0656

6.534.1 メッセージ本文

%s 番目の変換指定子は、ISO C 標準規格でサポートされません。

6.534.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.534.3 サンプルコード

void func(int count)
{
    printf("There are %Ld apples\n", count); /* W0656 */
}

6.534.4 関連メッセージ

6.534.5 対応バージョン

1.0.0


Next: , Previous: W0656, Up: Messages

6.535 W0657

6.535.1 メッセージ本文

%s 番目の変換指定子 `i' あるいは 'd' に無効なフラグが使われています。

6.535.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.535.3 サンプルコード

void func(int count)
{
    printf("There are %Ld apples\n", count); /* W0657 */
}

6.535.4 関連メッセージ

6.535.5 対応バージョン

1.0.0


Next: , Previous: W0657, Up: Messages

6.536 W0658

6.536.1 メッセージ本文

%s 番目の変換指定子 `o' に無効なフラグが使われています。

6.536.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.536.3 サンプルコード

void func(unsigned int count)
{
    printf("There are %Lo apples\n", count); /* W0658 */
}

6.536.4 関連メッセージ

6.536.5 対応バージョン

1.0.0


Next: , Previous: W0658, Up: Messages

6.537 W0659

6.537.1 メッセージ本文

%s 番目の変換指定子 `u' に無効なフラグが使われています。

6.537.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.537.3 サンプルコード

void func(unsigned int count)
{
    printf("There are %Lu apples\n", count); /* W0659 */
}

6.537.4 関連メッセージ

6.537.5 対応バージョン

1.0.0


Next: , Previous: W0659, Up: Messages

6.538 W0660

6.538.1 メッセージ本文

%s 番目の変換指定子 `x' に無効なフラグが使われています。

6.538.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.538.3 サンプルコード

void func(unsigned int count)
{
    printf("There are %Lx apples\n", count); /* W0660 */
}

6.538.4 関連メッセージ

6.538.5 対応バージョン

1.0.0


Next: , Previous: W0660, Up: Messages

6.539 W0661

6.539.1 メッセージ本文

%s 番目の変換指定子 `X' に無効なフラグが使われています。

6.539.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.539.3 サンプルコード

void func(unsigned int count)
{
    printf("There are %LX apples\n", count); /* W0661 */
}

6.539.4 関連メッセージ

6.539.5 対応バージョン

1.0.0


Next: , Previous: W0661, Up: Messages

6.540 W0662

6.540.1 メッセージ本文

%s 番目の変換指定子 `f' に無効なフラグが使われています。

6.540.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.540.3 サンプルコード

void func(double count)
{
    printf("There are %lf apples\n", count); /* W0662 */
}

6.540.4 関連メッセージ

6.540.5 対応バージョン

1.0.0


Next: , Previous: W0662, Up: Messages

6.541 W0663

6.541.1 メッセージ本文

%s 番目の変換指定子 `e' に無効なフラグが使われています。

6.541.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.541.3 サンプルコード

void func(double count)
{
    printf("There are %le apples\n", count); /* W0663 */
}

6.541.4 関連メッセージ

6.541.5 対応バージョン

1.0.0


Next: , Previous: W0663, Up: Messages

6.542 W0664

6.542.1 メッセージ本文

%s 番目の変換指定子 `E' に無効なフラグが使われています。

6.542.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.542.3 サンプルコード

void func(double count)
{
    printf("There are %lE apples\n", count); /* W0664 */
}

6.542.4 関連メッセージ

6.542.5 対応バージョン

1.0.0


Next: , Previous: W0664, Up: Messages

6.543 W0665

6.543.1 メッセージ本文

%s 番目の変換指定子 `g' に無効なフラグが使われています。

6.543.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.543.3 サンプルコード

void func(double count)
{
    printf("There are %lg apples\n", count); /* W0665 */
}

6.543.4 関連メッセージ

6.543.5 対応バージョン

1.0.0


Next: , Previous: W0665, Up: Messages

6.544 W0666

6.544.1 メッセージ本文

%s 番目の変換指定子 `G' に無効なフラグが使われています。

6.544.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.544.3 サンプルコード

void func(double count)
{
    printf("There are %lG apples\n", count); /* W0666 */
}

6.544.4 関連メッセージ

6.544.5 対応バージョン

1.0.0


Next: , Previous: W0666, Up: Messages

6.545 W0667

6.545.1 メッセージ本文

%s 番目の変換指定子 `c' に無効なフラグが使われています。

6.545.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.545.3 サンプルコード

void func(char count)
{
    printf("There are %hc apples\n", count); /* W0667 */
}

6.545.4 関連メッセージ

6.545.5 対応バージョン

1.0.0


Next: , Previous: W0667, Up: Messages

6.546 W0668

6.546.1 メッセージ本文

%s 番目の変換指定子 `%' に無効なフラグが使われています。

6.546.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.546.3 サンプルコード

void func(double percent)
{
    printf("There is %f%l% apple juice\n", percent); /* W0668 */
}

6.546.4 関連メッセージ

6.546.5 対応バージョン

1.0.0


Next: , Previous: W0668, Up: Messages

6.547 W0669

6.547.1 メッセージ本文

%s 番目の変換指定子 `s' に無効なフラグが使われています。

6.547.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.547.3 サンプルコード

void func(char *s)
{
    printf("There are %hs apples\n", s); /* W0669 */
}

6.547.4 関連メッセージ

6.547.5 対応バージョン

1.0.0


Next: , Previous: W0669, Up: Messages

6.548 W0670

6.548.1 メッセージ本文

%s 番目の変換指定子 `n' に無効なフラグが使われています。

6.548.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.548.3 サンプルコード

void func(void)
{
    int n;

    printf("There are %Ln apples\n", &n); /* W0670 */
}

6.548.4 関連メッセージ

6.548.5 対応バージョン

1.0.0


Next: , Previous: W0670, Up: Messages

6.549 W0671

6.549.1 メッセージ本文

%s 番目の変換指定子 `p' に無効なフラグが使われています。

6.549.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.549.3 サンプルコード

void func(char *p)
{
    printf("p points to %lp\n", p); /* W0671 */
}

6.549.4 関連メッセージ

6.549.5 対応バージョン

1.0.0


Next: , Previous: W0671, Up: Messages

6.550 W0672

6.550.1 メッセージ本文

%s 番目に無効な変換指定子が使われています。

6.550.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.550.3 サンプルコード

void func(void)
{
    int a;

    printf("%0", &a); /* W0672 */
}

6.550.4 関連メッセージ

6.550.5 対応バージョン

1.0.0


Next: , Previous: W0672, Up: Messages

6.551 W0673

6.551.1 メッセージ本文

%s 番目の変換指定子は、ISO C 標準規格でサポートされません。

6.551.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.551.3 サンプルコード

void func(void)
{
    int a;

    scanf("%y", &a); /* W0673 */
}

6.551.4 関連メッセージ

6.551.5 対応バージョン

1.0.0


Next: , Previous: W0673, Up: Messages

6.552 W0674

6.552.1 メッセージ本文

%s 番目の変換指定子 `d/i/n' に無効なフラグが使われています。

6.552.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.552.3 サンプルコード

void func(void)
{
    int a;

    scanf("%Ld", &a); /* W0674 */
}

6.552.4 関連メッセージ

6.552.5 対応バージョン

1.0.0


Next: , Previous: W0674, Up: Messages

6.553 W0675

6.553.1 メッセージ本文

%s 番目の変換指定子 `o' に無効なフラグが使われています。

6.553.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.553.3 サンプルコード

void func(void)
{
    int a;

    scanf("%Lo", &a); /* W0675 */
}

6.553.4 関連メッセージ

6.553.5 対応バージョン

1.0.0


Next: , Previous: W0675, Up: Messages

6.554 W0676

6.554.1 メッセージ本文

%s 番目の変換指定子 `u' に無効なフラグが使われています。

6.554.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.554.3 サンプルコード

void func(void)
{
    int a;

    scanf("%Lu", &a); /* W0676 */
}

6.554.4 関連メッセージ

6.554.5 対応バージョン

1.0.0


Next: , Previous: W0676, Up: Messages

6.555 W0677

6.555.1 メッセージ本文

%s 番目の変換指定子 `x/X' に無効なフラグが使われています。

6.555.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.555.3 サンプルコード

void func(void)
{
    int a;

    scanf("%Lx", &a); /* W0677 */
}

6.555.4 関連メッセージ

6.555.5 対応バージョン

1.0.0


Next: , Previous: W0677, Up: Messages

6.556 W0678

6.556.1 メッセージ本文

%s 番目の変換指定子 `e/E/f/g/G' に無効なフラグが使われています。

6.556.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.556.3 サンプルコード

void func(void)
{
    double a;

    scanf("%lle", &a); /* W0678 */
}

6.556.4 関連メッセージ

6.556.5 対応バージョン

1.0.0


Next: , Previous: W0678, Up: Messages

6.557 W0679

6.557.1 メッセージ本文

%s 番目の変換指定子 `s' に無効なフラグが使われています。

6.557.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.557.3 サンプルコード

void func(void)
{
    char a[256];

    scanf("%lls", a); /* W0679 */
}

6.557.4 関連メッセージ

6.557.5 対応バージョン

1.0.0


Next: , Previous: W0679, Up: Messages

6.558 W0680

6.558.1 メッセージ本文

%s 番目の変換指定子 `p' に無効なフラグが使われています。

6.558.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.558.3 サンプルコード

void func(void)
{
    void *a;

    scanf("%lp", &a); /* W0680 */
}

6.558.4 関連メッセージ

6.558.5 対応バージョン

1.0.0


Next: , Previous: W0680, Up: Messages

6.559 W0681

6.559.1 メッセージ本文

%s 番目の変換指定子 `%' に無効なフラグが使われています。

6.559.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.559.3 サンプルコード

void func(void)
{
    int a;

    scanf("%d%l%", &a); /* W0681 */
}

6.559.4 関連メッセージ

6.559.5 対応バージョン

1.0.0


Next: , Previous: W0681, Up: Messages

6.560 W0682

6.560.1 メッセージ本文

%s 番目の変換指定子 `[' に無効なフラグが使われています。

6.560.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.560.3 サンプルコード

void func(void)
{
    char buf[256];

    scanf("%L[0-9]", buf); /* W0682 */
}

6.560.4 関連メッセージ

6.560.5 対応バージョン

1.0.0


Next: , Previous: W0682, Up: Messages

6.561 W0683

6.561.1 メッセージ本文

%s 番目の変換指定子 `c' に無効なフラグが使われています。

6.561.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.561.3 サンプルコード

void func(void)
{
    char a;

    scanf("%Lc", &a); /* W0683 */
}

6.561.4 関連メッセージ

6.561.5 対応バージョン

1.0.0


Next: , Previous: W0683, Up: Messages

6.562 W0684

6.562.1 メッセージ本文

%s 番目に無効な変換指定子が使われています。

6.562.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.562.3 サンプルコード

void func(void)
{
    long a;

    scanf("%l", &a); /* W0684 */
}

6.562.4 関連メッセージ

6.562.5 対応バージョン

1.0.0


Next: , Previous: W0684, Up: Messages

6.563 W0685

6.563.1 メッセージ本文

`[]' の走査セット内の `-' の前にある文字が `-' の後にある文字より大きいです。

6.563.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.563.3 サンプルコード

char c;
scanf("%[z-a]", &c); /* W0685 */

6.563.4 関連メッセージ

6.563.5 対応バージョン

1.6.0


Next: , Previous: W0685, Up: Messages

6.564 W0686

6.564.1 メッセージ本文

走査セット(`[]' に囲まれた文字の並び)の中に同じ文字が二つ以上記述されています。

6.564.2 内容

未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.564.3 サンプルコード

char c;
scanf("%[abcda]", &c); /* W0686 */

6.564.4 関連メッセージ

6.564.5 対応バージョン

1.6.0


Next: , Previous: W0686, Up: Messages

6.565 W0687

6.565.1 メッセージ本文

defined 演算子を削除する目的で #undef を使っています。

6.565.2 内容

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.565.3 サンプルコード

#undef defined /* W0687 */

6.565.4 関連メッセージ

6.565.5 対応バージョン

1.4.0


Next: , Previous: W0687, Up: Messages

6.566 W0688

6.566.1 メッセージ本文

#line 指令の後に、1 から 32767 の範囲の行番号が記述されていません。

6.566.2 内容

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.566.3 サンプルコード

#line 35000 "test.c" /* W0688 */

6.566.4 関連メッセージ

6.566.5 対応バージョン

1.2.0


Next: , Previous: W0688, Up: Messages

6.567 W0689

6.567.1 メッセージ本文

#line 指令の構文が `#line 汎整数定数 "文字列"' の形式と合っていません。

6.567.2 内容

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.567.3 サンプルコード

#line 35 * 100 /* W0689 */
#line 35 * 100 "test.c" /* W0689 */
#line 35 L"あいう.c" /* W0689 */
#line __FILE__ 35 /* W0689 */

6.567.4 関連メッセージ

6.567.5 対応バージョン

1.2.0


Next: , Previous: W0689, Up: Messages

6.568 W0690

6.568.1 メッセージ本文

#line 指令の後に行番号が記述されていません。

6.568.2 内容

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.568.3 サンプルコード

#line LINE1000 /* W0690 */
#line __FILE__ 35 /* W0690 */

6.568.4 関連メッセージ

6.568.5 対応バージョン

1.2.0


Next: , Previous: W0690, Up: Messages

6.569 W0691

6.569.1 メッセージ本文

`##' 演算子の結果が有効な前処理字句ではありません。

6.569.2 内容

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.569.3 サンプルコード

#define MACRO(a, b) a ## b

double d = (double) MACRO(-, 123); /* W0691 */

6.569.4 関連メッセージ

6.569.5 対応バージョン

1.16.0


Next: , Previous: W0691, Up: Messages

6.570 W0692

6.570.1 メッセージ本文

関数形式マクロ `%s' に実引数が与えられていません。

6.570.2 内容

このような記述は ISO C99 のみで使用可能なので、移植性を低下させます。

6.570.3 サンプルコード

#define MACRO(a) #a

const char *s = (char *) MACRO(); /* W0692 */

6.570.4 関連メッセージ

6.570.5 対応バージョン

1.16.0


Next: , Previous: W0692, Up: Messages

6.571 W0693

6.571.1 メッセージ本文

関数形式マクロがその定義よりも少ない実引数で呼び出されています。

6.571.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

このような記述は、言語制約違反になりますので、移植性を低下させます。

6.571.3 サンプルコード

/* 追記予定 */

6.571.4 関連メッセージ

6.571.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W0693, Up: Messages

6.572 W0694

6.572.1 メッセージ本文

`assert' という名称の関数を呼び出す目的で、assert マクロが抑制されています。未定義の結果になります。

6.572.2 内容

assert という名前の関数を作成すると、未定義の結果になります。

6.572.3 サンプルコード

#undef assert
extern void assert(int);

void foo(void)
{
    assert("should not be reached" == ""); /* W0694 */
}

6.572.4 関連メッセージ

なし。

6.572.5 対応バージョン

1.16.0


Next: , Previous: W0694, Up: Messages

6.573 W0695

6.573.1 メッセージ本文

assert マクロを #undef してその名前の関数を呼び出しできるようにすると、未定義の結果になります。

6.573.2 内容

assert マクロの定義解消や再定義は、未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。

6.573.3 サンプルコード

#undef assert /* W0695 */
extern void assert(int a);

6.573.4 関連メッセージ

なし。

6.573.5 対応バージョン

1.4.0


Next: , Previous: W0695, Up: Messages

6.574 W0696

6.574.1 メッセージ本文

この `#if...' で使われているマクロ `%s' は定義されていません。

6.574.2 内容

通常、未定義マクロは 0 に置き換えられるため、未定義の動作というわけではありませんが、プリプロセッサに依存した処理といえますので、移植性を低下させます。 また、マクロが未定義であることはプログラマの意図しないことの可能性もあります。その場合は、動作上のバグにつながります。

6.574.3 サンプルコード

#define MACRO (1)

#if MACRO == 1
    ...snip...
#endif

#undef MACRO

#if MACRO == 2 /* W0696 */
    ...snip...
#endif

6.574.4 関連メッセージ

なし。

6.574.5 対応バージョン

1.0.0


Next: , Previous: W0696, Up: Messages

6.575 W0697

6.575.1 メッセージ本文

戻り値を返すように定義された関数 `%s' の中に、暗黙の `return;' 文で終了するパスが存在します。

6.575.2 内容

式を持たない return 文は不定値を返します。

6.575.3 サンプルコード

int func(int value) /* W0697 */
{
    if (value == 0) {
        return 0;
    }
    /* No return statement at the end of this function. */
}

6.575.4 関連メッセージ

6.575.5 対応バージョン

1.14.0


Next: , Previous: W0697, Up: Messages

6.576 W0698

6.576.1 メッセージ本文

戻り値を返すように定義された関数 `%s' の中で、`return;' 文が見つかりました。

6.576.2 内容

式を持たない return 文は不定値を返します。

6.576.3 サンプルコード

int func(void)
{
    return; /* W0698 */
}

6.576.4 関連メッセージ

6.576.5 対応バージョン

1.4.0


Next: , Previous: W0698, Up: Messages

6.577 W0699

6.577.1 メッセージ本文

関数 `%s()' は、戻り値の型が明示されていないため、戻り値の型は暗黙的な int ですが、return 文に値を戻すための式が記述されていません。

6.577.2 内容

式を持たない return 文は不定値を返します。

6.577.3 サンプルコード

extern func(void)
{
    return; /* W0699 */
}

6.577.4 関連メッセージ

6.577.5 対応バージョン

1.4.0


Next: , Previous: W0699, Up: Messages

6.578 W0700

6.578.1 メッセージ本文

関数 `%s()' は、戻り値の型が明示されていないため、戻り値の型は暗黙的な int ですが、値を戻す return 文がありません。

6.578.2 内容

式を持たない return 文は不定値を返します。

6.578.3 サンプルコード

extern func(void) /* W0700 */
{
}

6.578.4 関連メッセージ

6.578.5 対応バージョン

1.14.0


Next: , Previous: W0700, Up: Messages

6.579 W0703

6.579.1 メッセージ本文

タグ `%s' がより広い有効範囲をもつ同じ識別子の宣言を隠しています。

6.579.2 内容

ローカル変数がグローバル変数を隠蔽することで、ローカル領域でグローバル変数を使用している箇所が影響を受ける可能性があります。

6.579.3 サンプルコード

union FOO {
    ...snip...
};

void func(void)
{
    struct FOO { /* W0703 */
        ...snip...
    };
}

6.579.4 関連メッセージ

6.579.5 対応バージョン

1.0.0


Next: , Previous: W0703, Up: Messages

6.580 W0704

6.580.1 メッセージ本文

この `%s' の宣言は、より広い有効範囲をもつ同じ識別子の宣言を隠しています。

6.580.2 内容

ローカル変数がグローバル変数を隠蔽することで、ローカル領域でグローバル変数を使用している箇所が影響を受ける可能性があります。

6.580.3 サンプルコード

int a;

void func(void)
{
    double a; /* W0704 */
}

6.580.4 関連メッセージ

6.580.5 対応バージョン

1.0.0


Next: , Previous: W0704, Up: Messages

6.581 W0705

6.581.1 メッセージ本文

配列の添字が領域外を指すことがあります。

6.581.2 内容

配列の領域外にアクセスする動作は未定義の動作になります。したがって予期しない動作を引き起こす可能性があります。

6.581.3 サンプルコード

void func(unsigned int a)
{
    int buf[10];

    if (a < 10) {
        buf[a] = 0;
    }

    ...snip...

    buf[a] = 5; /* W0705 */
}

6.581.4 関連メッセージ

6.581.5 対応バージョン

1.0.0


Next: , Previous: W0705, Up: Messages

6.582 W0707

6.582.1 メッセージ本文

配列の添字が領域外を指す定数です。

6.582.2 内容

配列の領域外にアクセスする動作は未定義の動作になります。したがって予期しない動作を引き起こす可能性があります。

6.582.3 サンプルコード

extern int a[5];

int foo(void)
{
    int i = a[5]; /* W0707 */
    return i;
}

6.582.4 関連メッセージ

6.582.5 対応バージョン

1.18.0


Next: , Previous: W0707, Up: Messages

6.583 W0708

6.583.1 メッセージ本文

for 文の制御変数 `%s' は繰り返し文本体の中で値を変えられています。

6.583.2 内容

ループ本体でループ制御変数を変更することが、すぐさま構造化定理に違反することにはなりませんが、 どのように反復するかを判断しにくくなり、修正やテスト時に混乱のもとになります。

6.583.3 サンプルコード

int i, j;

for (i = j = 0; i < 10; j++) {
    i++; /* W0708 */
}

6.583.4 関連メッセージ

なし。

6.583.5 対応バージョン

1.0.0


Next: , Previous: W0708, Up: Messages

6.584 W0711

6.584.1 メッセージ本文

関係演算子の右側のオペランドが実質的なブール型の式です。

6.584.2 内容

このような記述は誤りの可能性があります。

6.584.3 サンプルコード

int func(int a, int b, int c, int d)
{
    return (a + b) > (c > d); /* W0711 */
}

6.584.4 関連メッセージ

6.584.5 対応バージョン

1.8.0


Next: , Previous: W0711, Up: Messages

6.585 W0712

6.585.1 メッセージ本文

関係演算子の左側のオペランドが実質的なブール型の式です。

6.585.2 内容

このような記述は誤りの可能性があります。

6.585.3 サンプルコード

int func(int a, int b, int c, int d)
{
    return (a > b) > (c + d); /* W0712 */
}

6.585.4 関連メッセージ

6.585.5 対応バージョン

1.8.0


Next: , Previous: W0712, Up: Messages

6.586 W0713

6.586.1 メッセージ本文

関係演算子の両側のオペランドが実質的なブール型の式です。

6.586.2 内容

このような記述は誤りの可能性があります。

6.586.3 サンプルコード

int func(int a, int b, int c, int d)
{
    return (a > b) > (c > d); /* W0713 */
}

6.586.4 関連メッセージ

6.586.5 対応バージョン

1.8.0


Next: , Previous: W0713, Up: Messages

6.587 W0714

6.587.1 メッセージ本文

`&' 演算子の両側のオペランドが実質的なブール型の式です。

6.587.2 内容

このような記述は誤りの可能性があります。

6.587.3 サンプルコード

int func(int a, int b, int c, int d)
{
    return (a > b) & (c > d); /* W0714 */
}

6.587.4 関連メッセージ

6.587.5 対応バージョン

1.8.0


Next: , Previous: W0714, Up: Messages

6.588 W0715

6.588.1 メッセージ本文

`|' 演算子の両側のオペランドが実質的なブール型の式です。

6.588.2 内容

このような記述は誤りの可能性があります。

6.588.3 サンプルコード

int func(int a, int b, int c, int d)
{
    return (a > b) | (c > d); /* W0715 */
}

6.588.4 関連メッセージ

6.588.5 対応バージョン

1.8.0


Next: , Previous: W0715, Up: Messages

6.589 W0716

6.589.1 メッセージ本文

ビット演算子あるいは算術演算子の両側のオペランドが実質的なブール型の式です。

6.589.2 内容

このような記述は誤りの可能性があります。

6.589.3 サンプルコード

int func(int a, int b, int c, int d)
{
    return (a > b) + (c > d); /* W0716 */
}

6.589.4 関連メッセージ

6.589.5 対応バージョン

1.10.0


Next: , Previous: W0716, Up: Messages

6.590 W0717

6.590.1 メッセージ本文

ビット演算子あるいは算術演算子の左側のオペランドが実質的なブール型の式です。

6.590.2 内容

このような記述は誤りの可能性があります。

6.590.3 サンプルコード

int func(int a, int b, int c)
{
    return (a > b) + c; /* W0717 */
}

6.590.4 関連メッセージ

6.590.5 対応バージョン

1.10.0


Next: , Previous: W0717, Up: Messages

6.591 W0718

6.591.1 メッセージ本文

ビット演算子あるいは算術演算子の右側のオペランドが実質的なブール型の式です。

6.591.2 内容

このような記述は誤りの可能性があります。

6.591.3 サンプルコード

int func(int a, int b, int c)
{
    return a + (b > c);  /* W0718 */
}

6.591.4 関連メッセージ

6.591.5 対応バージョン

1.10.0


Next: , Previous: W0718, Up: Messages

6.592 W0719

6.592.1 メッセージ本文

シフト演算子の右オペランドが、潜在型 `%s' のビット幅以上の定数値です。

6.592.2 内容

このようなシフト演算は汎整数拡張後の型の範囲を超えていないため、 未定義の動作にはなりませんが、 汎整数拡張が生じない型の変数への代入に変更した時点で未定義の動作になりますので、 潜在的な危険を伴います。

6.592.3 サンプルコード

int foo(char c)
{
    return c << 31; /* W0719 */
}

6.592.4 関連メッセージ

なし。

6.592.5 対応バージョン

1.18.0


Next: , Previous: W0719, Up: Messages

6.593 W0720

6.593.1 メッセージ本文

浮動小数点型の値が変換先の型の範囲に入りきりません。

6.593.2 内容

このような式は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。

6.593.3 サンプルコード

signed char sc1 = (signed char) 127.5; /* OK */
signed char sc2 = (signed char) 128.5; /* W0720 */

signed char sc3 = (signed char) -128.5; /* OK */
signed char sc4 = (signed char) -129.5; /* W0720 */

6.593.4 関連メッセージ

6.593.5 対応バージョン

1.4.0


Next: , Previous: W0720, Up: Messages

6.594 W0721

6.594.1 メッセージ本文

この汎整数型は、ポインタの値を保持するのに十分な大きさをもちません。

6.594.2 内容

上記のような変換により、ポインタ型変数の一部の情報が欠落したものが整数型に代入されることになります。 したがって、代入先の値はもはや正しいアドレスを指していないことになります。

6.594.3 サンプルコード

void func(int *p)
{
    /* when short is 16 bit long and pointer is 32 bit long */
    unsigned short us = (unsigned short) p; /* W0721 */
}

6.594.4 関連メッセージ

なし。

6.594.5 対応バージョン

1.4.0


Next: , Previous: W0721, Up: Messages

6.595 W0722

6.595.1 メッセージ本文

符号付きの式の値がオーバーフローしています。

6.595.2 内容

値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。 したがって、予期しない動作を引き起こす可能性があります。

6.595.3 サンプルコード

int func(int a)
{
    /* when int is 32 bit long */
    if (a < 0) {
        return a + 1; /* OK */
    }
    else if (a < 2147483647) {
        return a + 1; /* OK */
    }

    return a + 1; /* W0722 */
}

6.595.4 関連メッセージ

6.595.5 対応バージョン

1.4.0


Next: , Previous: W0722, Up: Messages

6.596 W0723

6.596.1 メッセージ本文

符号付きの式の値がオーバーフローする可能性があります。

6.596.2 内容

値が型で表現可能な範囲を超えてしまう(オーバーフローする)と、どのような値が代入されるかは未定義です。 したがって、予期しない動作を引き起こす可能性があります。

6.596.3 サンプルコード

int func(int a)
{
    /* when int is 32 bit long */
    if (a < 0) {
        return a + 1; /* OK */
    }
    else if (a < 2000000000) {
        return a + 1; /* OK */
    }

    return a + 1; /* W0723 */
}

6.596.4 関連メッセージ

6.596.5 対応バージョン

1.4.0


Next: , Previous: W0723, Up: Messages

6.597 W0724

6.597.1 メッセージ本文

条件付きインクルード指令によって、認識できない前処理指令が無視されました。

6.597.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

認識できない前処理指令を見つけたときの対処方法は処理系定義です。したがって、移植性が低下します。

6.597.3 サンプルコード

/* 追記予定 */

6.597.4 関連メッセージ

なし。

6.597.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W0724, Up: Messages

6.598 W0726

6.598.1 メッセージ本文

修飾子付き void 型の戻り値が定義された関数 `%s()' の中で、`return 式;' が見つかりました。

6.598.2 内容

値を戻してはならない関数であるにも関わらず、明示的な return 文があります。このような記述は誤りです。

6.598.3 サンプルコード

const void func(int a)
{
    if (a == 0) {
        return 0; /* W0726 */
    }
}

6.598.4 関連メッセージ

なし。

6.598.5 対応バージョン

1.4.0


Next: , Previous: W0726, Up: Messages

6.599 W0727

6.599.1 メッセージ本文

列挙型にない値を使っています。

6.599.2 内容

このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。

6.599.3 サンプルコード

enum Fruits {
    APPLE = 1,
    BANANA,
    ORANGE
};

enum Fruits fruit = 5; /* W0727 */

6.599.4 関連メッセージ

6.599.5 対応バージョン

1.4.0


Next: , Previous: W0727, Up: Messages

6.600 W0728

6.600.1 メッセージ本文

列挙型の関数仮引数に、別の列挙型の列挙定数が実引数として渡されています。

6.600.2 内容

このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。

6.600.3 サンプルコード

enum Color { RED, BLUE, GREEN };
enum Fruits { APPLE, BANANA, ORANGE };

extern void func1(enum Color);

void func2(void)
{
    func1(ORANGE); /* W0728 */
}

6.600.4 関連メッセージ

6.600.5 対応バージョン

1.4.0


Next: , Previous: W0728, Up: Messages

6.601 W0729

6.601.1 メッセージ本文

列挙型のオブジェクトに、別の列挙型の列挙定数が代入されています。

6.601.2 内容

このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。

6.601.3 サンプルコード

enum Color { RED, BLUE, GREEN };
enum Fruits { APPLE, BANANA, ORANGE };

void func(void)
{
    enum Color c;

    c = ORANGE; /* W0729 */
}

6.601.4 関連メッセージ

6.601.5 対応バージョン

1.4.0


Next: , Previous: W0729, Up: Messages

6.602 W0730

6.602.1 メッセージ本文

列挙型の戻り値が定義された関数で、別の列挙型の列挙定数が戻されています。

6.602.2 内容

このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。

6.602.3 サンプルコード

enum Color { RED, BLUE, GREEN };
enum Fruits { APPLE, BANANA, ORANGE };

enum Color func(void)
{
    return ORANGE; /* W0730 */
}

6.602.4 関連メッセージ

6.602.5 対応バージョン

1.4.0


Next: , Previous: W0730, Up: Messages

6.603 W0731

6.603.1 メッセージ本文

switch 文の case ラベルの値 `%s' は制御式の列挙型に属していません。

6.603.2 内容

このような列挙型の使い方は文法的には合法ですが、本来の列挙型変数として使用されるべき情報を損失するという意味で問題があります。

6.603.3 サンプルコード

enum Color { RED, BLUE, GREEN };
enum Fruits { APPLE, BANANA, ORANGE, GRAPE };

int func(enum Color c)
{
    switch (c) {
    case RED:
        return 1;
    case GRAPE: /* W0731 */
        return 2;
    }

    return 0;
}

6.603.4 関連メッセージ

6.603.5 対応バージョン

1.4.0


Next: , Previous: W0731, Up: Messages

6.604 W0732

6.604.1 メッセージ本文

`&&' 演算子の両側のオペランドがビット演算の式あるいは算術式です。

6.604.2 内容

このような記述は誤りの可能性があります。

6.604.3 サンプルコード

extern void func(unsigned int a, unsigned int b,unsigned int c, unsigned int d)
{
    int r;
    r = (a + b) && (c - d); /* W0732 */
    r = (a * b) && (c / d); /* W0732 */

    r = (a << b) && (c << d); /* W0732 */
    r = (a >> b) && (c >> d); /* W0732 */
}

6.604.4 関連メッセージ

6.604.5 対応バージョン

1.12.0


Next: , Previous: W0732, Up: Messages

6.605 W0733

6.605.1 メッセージ本文

`||' 演算子の両側のオペランドがビット演算の式あるいは算術式です。

6.605.2 内容

このような記述は誤りの可能性があります。

6.605.3 サンプルコード

extern void func(unsigned int a, unsigned int b,unsigned int c, unsigned int d)
{
    int r;
    r = (a + b) || (c - d); /* W0733 */
    r = (a * b) || (c / d); /* W0733 */

    r = (a << b) || (c << d); /* W0733 */
    r = (a >> b) || (c >> d); /* W0733 */
}

6.605.4 関連メッセージ

6.605.5 対応バージョン

1.12.0


Next: , Previous: W0733, Up: Messages

6.606 W0734

6.606.1 メッセージ本文

論理演算子の左側のオペランドがビット演算の式あるいは算術式です。

6.606.2 内容

このような記述は誤りの可能性があります。

6.606.3 サンプルコード

extern void func(unsigned int a, unsigned int b, unsigned int c)
{
    int r;
    r = (a + b) && c; /* W0734 */
    r = (a - b) && c; /* W0734 */

    r = (a << b) || c; /* W0734 */
    r = (a >> b) || c; /* W0734 */
}

6.606.4 関連メッセージ

6.606.5 対応バージョン

1.12.0


Next: , Previous: W0734, Up: Messages

6.607 W0735

6.607.1 メッセージ本文

論理演算子の右側のオペランドがビット演算の式あるいは算術式です。

6.607.2 内容

このような記述は誤りの可能性があります。

6.607.3 サンプルコード

extern void func(unsigned int a, unsigned int b, unsigned int c)
{
    int r;
    r = a && (b + c); /* W0735 */
    r = a && (b - c); /* W0735 */

    r = a || (b >> c); /* W0735 */
    r = a || (b << c); /* W0735 */
}

6.607.4 関連メッセージ

6.607.5 対応バージョン

1.12.0


Next: , Previous: W0735, Up: Messages

6.608 W0736

6.608.1 メッセージ本文

ファイルスコープで宣言された静的変数 `%s' は 1 つの関数内でしか読み書きされていません。

6.608.2 内容

グローバル変数が、1 つの関数内でしか使用されていません。このような変数は、保守性を低下させます。

6.608.3 サンプルコード

static int a = 10; /* W0736 */

int func1(void)
{
    return 0;
}

int func2(void)
{
    return ++a;
}

6.608.4 関連メッセージ

なし。

6.608.5 対応バージョン

1.0.0


Next: , Previous: W0736, Up: Messages

6.609 W0737

6.609.1 メッセージ本文

`enum %s' の内容が不明です。列挙体タグが内容を指定せずに宣言されています。

6.609.2 内容

定義していない列挙体のタグを使用することは言語制約違反になります。したがって、移植性を低下させます。

6.609.3 サンプルコード

extern enum Foo foo; /* W0737 */

6.609.4 関連メッセージ

なし。

6.609.5 対応バージョン

1.4.0


Next: , Previous: W0737, Up: Messages

6.610 W0738

6.610.1 メッセージ本文

正の整数定数の値がより小さな符号無し型への暗黙の型変換を行ったため、切り捨てられます。

6.610.2 内容

値が型で表現可能な範囲を超えてしまう(オーバーフローする)ことで、代入先には元々の定数の値がそのまま入らなくなります。 つまり、プログラマの意図しない値が代入されることになり、不具合につながります。

6.610.3 サンプルコード

/* when char is 8 bit long */
const unsigned char uc1 = 255; /* OK */
const unsigned char uc2 = 256; /* W0738 */

/* when int is 32 bit long */
const unsigned int ui1 = 4294967295; /* OK */
const unsigned int ui2 = 4294967296; /* W0738 */

6.610.4 関連メッセージ

なし。

6.610.5 対応バージョン

1.4.0


Next: , Previous: W0738, Up: Messages

6.611 W0739

6.611.1 メッセージ本文

定数式における符号無し減算の結果が負になりました。

6.611.2 内容

値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。 つまり、プログラマの意図しない値が代入されることになり、不具合につながります。

6.611.3 サンプルコード

const unsigned int ui1 = 3U - 3U; /* OK */
const unsigned int ui2 = 3U - 5U; /* W0739 */

6.611.4 関連メッセージ

6.611.5 対応バージョン

1.4.0


Next: , Previous: W0739, Up: Messages

6.612 W0740

6.612.1 メッセージ本文

定数式における符号無し加算の結果が最大値を超えました。

6.612.2 内容

値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。 つまり、プログラマの意図しない値が代入されることになり、不具合につながります。

6.612.3 サンプルコード

/* when int is 32 bit long */
const unsigned int ui1 = 4294967294U + 1U; /* OK */
const unsigned int ui2 = 4294967295U + 1U; /* W0740 */

6.612.4 関連メッセージ

6.612.5 対応バージョン

1.4.0


Next: , Previous: W0740, Up: Messages

6.613 W0741

6.613.1 メッセージ本文

定数式における符号無し乗算の結果が最大値を超えました。

6.613.2 内容

値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。 つまり、プログラマの意図しない値が代入されることになり、不具合につながります。

6.613.3 サンプルコード

/* when int is 32 bit long */
const unsigned int ui1 = 2000000000U * 2U; /* OK */
const unsigned int ui2 = 3000000000U * 2U; /* W0741 */

6.613.4 関連メッセージ

6.613.5 対応バージョン

1.4.0


Next: , Previous: W0741, Up: Messages

6.614 W0742

6.614.1 メッセージ本文

負の整数定数式が符号無し型に変換されています。

6.614.2 内容

この変換は文法的に問題ありませんが、プログラマの意図どおりでない可能性が高いです。

6.614.3 サンプルコード

#define MACRO (50)

unsigned int ui;

ui = MACRO - 100; /* W0742 */

6.614.4 関連メッセージ

なし。

6.614.5 対応バージョン

1.0.0


Next: , Previous: W0742, Up: Messages

6.615 W0743

6.615.1 メッセージ本文

整数定数式の値は、変換先の符号付きの結果の型で表現できる範囲を超えています。

6.615.2 内容

値が型で表現可能な範囲を超えてしまうことで、代入先には元々の定数の値がそのまま入らなくなります。 つまり、プログラマの意図しない値が代入されることになり、不具合につながります。 また、このような処理は、動作が処理系定義になります。したがって、移植性を低下させます。

6.615.3 サンプルコード

/* when char is 8 bit long */
const signed char sc1 = 127; /* OK */
const signed char sc2 = 128; /* W0743 */

/* when int is 32 bit long */
const int si1 = 2147483647; /* OK */
const int si2 = 2147483648; /* W0743 */

6.615.4 関連メッセージ

なし。

6.615.5 対応バージョン

1.4.0


Next: , Previous: W0743, Up: Messages

6.616 W0744

6.616.1 メッセージ本文

この制御式の値は偽になる定数のため、制御文本体は実行されません。

6.616.2 内容

到達しないコードがあるため、信頼性が低下します。

6.616.3 サンプルコード

#define MACRO1 (0)
#define MACRO2 (1)

if (MACRO1 == MACRO2) { /* W0744 */
    ...snip...
}

6.616.4 関連メッセージ

なし。

6.616.5 対応バージョン

1.0.0


Next: , Previous: W0744, Up: Messages

6.617 W0745

6.617.1 メッセージ本文

配列の添字が、領域外を指しています。

6.617.2 内容

配列の領域外にアクセスする動作は未定義の動作になります。したがって予期しない動作を引き起こす可能性があります。

6.617.3 サンプルコード

void func(unsigned int a)
{
    int buf[10];

    if (a > 5 && a < 10) {
        buf[a + 5] = 0; /* W0745 */
    }
}

6.617.4 関連メッセージ

6.617.5 対応バージョン

1.0.0


Next: , Previous: W0745, Up: Messages

6.618 W0747

6.618.1 メッセージ本文

暗黙的に signed short 型から signed char 型に型変換されています。

6.618.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.618.3 サンプルコード

extern void foo(signed char a);

void bar(short a)
{
    signed char b = a; /* W0747 */
    foo(a); /* W0747 */
}

6.618.4 関連メッセージ

6.618.5 対応バージョン

1.0.0


Next: , Previous: W0747, Up: Messages

6.619 W0748

6.619.1 メッセージ本文

暗黙的に unsigned short 型から unsigned char 型に型変換されています。

6.619.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.619.3 サンプルコード

extern void foo(unsigned char a);

void bar(unsigned short a)
{
      unsigned char b = a; /* W0748 */
      foo(a); /* W0748 */
}

6.619.4 関連メッセージ

6.619.5 対応バージョン

1.0.0


Next: , Previous: W0748, Up: Messages

6.620 W0749

6.620.1 メッセージ本文

暗黙的に signed int 型から signed char 型に型変換されています。

6.620.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.620.3 サンプルコード

extern void foo(signed char a);

void bar(int a)
{
    signed char b = a; /* W0749 */
    foo(a); /* W0749 */
}

6.620.4 関連メッセージ

6.620.5 対応バージョン

1.0.0


Next: , Previous: W0749, Up: Messages

6.621 W0750

6.621.1 メッセージ本文

暗黙的に signed int 型から signed short 型に型変換されています。

6.621.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.621.3 サンプルコード

extern void foo(short a);

void bar(int a)
{
    short b = a; /* W0750 */
    foo(a); /* W0750 */
}

6.621.4 関連メッセージ

6.621.5 対応バージョン

1.0.0


Next: , Previous: W0750, Up: Messages

6.622 W0751

6.622.1 メッセージ本文

暗黙的に unsigned int 型から unsigned char 型に型変換されています。

6.622.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.622.3 サンプルコード

extern void foo(unsigned char a);

void bar(unsigned int a)
{
    unsigned char b = a; /* W0751 */
    foo(a); /* W0751 */
}

6.622.4 関連メッセージ

6.622.5 対応バージョン

1.0.0


Next: , Previous: W0751, Up: Messages

6.623 W0752

6.623.1 メッセージ本文

暗黙的に unsigned int 型から unsigned short 型に型変換されています。

6.623.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.623.3 サンプルコード

extern void foo(unsigned short a);

void bar(unsigned int a)
{
    unsigned short b = a; /* W0752 */
    foo(a); /* W0752 */
}

6.623.4 関連メッセージ

6.623.5 対応バージョン

1.0.0


Next: , Previous: W0752, Up: Messages

6.624 W0753

6.624.1 メッセージ本文

暗黙的に signed long 型から signed char 型に型変換されています。

6.624.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.624.3 サンプルコード

extern void foo(signed char a);

void bar(long a)
{
    signed char b = a; /* W0753 */
    foo(a); /* W0753 */
}

6.624.4 関連メッセージ

6.624.5 対応バージョン

1.0.0


Next: , Previous: W0753, Up: Messages

6.625 W0754

6.625.1 メッセージ本文

暗黙的に signed long 型から signed short 型に型変換されています。

6.625.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.625.3 サンプルコード

extern void foo(short a);

void bar(long a)
{
    short b = a; /* W0754 */
    foo(a); /* W0754 */
}

6.625.4 関連メッセージ

6.625.5 対応バージョン

1.0.0


Next: , Previous: W0754, Up: Messages

6.626 W0755

6.626.1 メッセージ本文

暗黙的に signed long 型から signed int 型に型変換されています。

6.626.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.626.3 サンプルコード

extern void foo(int a);

void bar(long a)
{
    int b = a; /* W0755 */
    foo(a); /* W0755 */
}

6.626.4 関連メッセージ

6.626.5 対応バージョン

1.0.0


Next: , Previous: W0755, Up: Messages

6.627 W0756

6.627.1 メッセージ本文

暗黙的に unsigned long 型から unsigned char 型に型変換されています。

6.627.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.627.3 サンプルコード

extern void foo(unsigned char a);

void bar(unsigned long a)
{
    unsigned char b = a; /* W0756 */
    foo(a); /* W0756 */
}

6.627.4 関連メッセージ

6.627.5 対応バージョン

1.0.0


Next: , Previous: W0756, Up: Messages

6.628 W0757

6.628.1 メッセージ本文

暗黙的に unsigned long 型から unsigned short 型に型変換されています。

6.628.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.628.3 サンプルコード

extern void foo(unsigned short a);

void bar(unsigned long a)
{
    unsigned short b = a; /* W0757 */
    foo(a); /* W0757 */
}

6.628.4 関連メッセージ

6.628.5 対応バージョン

1.0.0


Next: , Previous: W0757, Up: Messages

6.629 W0758

6.629.1 メッセージ本文

暗黙的に unsigned long 型から unsigned int 型に型変換されています。

6.629.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.629.3 サンプルコード

extern void foo(unsigned int a);

void bar(unsigned long a)
{
    unsigned int b = a; /* W0758 */
    foo(a); /* W0758 */
}

6.629.4 関連メッセージ

6.629.5 対応バージョン

1.0.0


Next: , Previous: W0758, Up: Messages

6.630 W0759

6.630.1 メッセージ本文

暗黙的に signed long long 型から signed char 型に型変換されています。

6.630.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.630.3 サンプルコード

extern void foo(signed char a);

void bar(long long a)
{
    signed char b = a; /* W0759 */
    foo(a); /* W0759 */
}

6.630.4 関連メッセージ

6.630.5 対応バージョン

1.0.0


Next: , Previous: W0759, Up: Messages

6.631 W0760

6.631.1 メッセージ本文

暗黙的に signed long long 型から signed short 型に型変換されています。

6.631.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.631.3 サンプルコード

extern void foo(short a);

void bar(long long a)
{
    short b = a; /* W0760 */
    foo(a); /* W0760 */
}

6.631.4 関連メッセージ

6.631.5 対応バージョン

1.0.0


Next: , Previous: W0760, Up: Messages

6.632 W0761

6.632.1 メッセージ本文

暗黙的に signed long long 型から signed int 型に型変換されています。

6.632.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.632.3 サンプルコード

extern void foo(int a);

void bar(long long a)
{
    int b = a; /* W0761 */
    foo(a); /* W0761 */
}

6.632.4 関連メッセージ

6.632.5 対応バージョン

1.0.0


Next: , Previous: W0761, Up: Messages

6.633 W0762

6.633.1 メッセージ本文

暗黙的に signed long long 型から signed long 型に型変換されています。

6.633.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.633.3 サンプルコード

extern void foo(long a);

void bar(long long a)
{
    long b = a; /* W0762 */
    foo(a); /* W0762 */
}

6.633.4 関連メッセージ

6.633.5 対応バージョン

1.0.0


Next: , Previous: W0762, Up: Messages

6.634 W0763

6.634.1 メッセージ本文

暗黙的に unsigned long long 型から unsigned char 型に型変換されています。

6.634.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.634.3 サンプルコード

extern void foo(unsigned char a);

void bar(unsigned long long a)
{
    unsigned char b = a; /* W0763 */
    foo(a); /* W0763 */
}

6.634.4 関連メッセージ

6.634.5 対応バージョン

1.0.0


Next: , Previous: W0763, Up: Messages

6.635 W0764

6.635.1 メッセージ本文

暗黙的に unsigned long long 型から unsigned short 型に型変換されています。

6.635.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.635.3 サンプルコード

extern void foo(unsigned short a);

void bar(unsigned long long a)
{
    unsigned short b = a; /* W0764 */
    foo(a); /* W0764 */
}

6.635.4 関連メッセージ

6.635.5 対応バージョン

1.0.0


Next: , Previous: W0764, Up: Messages

6.636 W0765

6.636.1 メッセージ本文

暗黙的に unsigned long long 型から unsigned int 型に型変換されています。

6.636.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.636.3 サンプルコード

extern void foo(unsigned int a);

void bar(unsigned long long a)
{
    unsigned int b = a; /* W0765 */
    foo(a); /* W0765 */
}

6.636.4 関連メッセージ

6.636.5 対応バージョン

1.0.0


Next: , Previous: W0765, Up: Messages

6.637 W0766

6.637.1 メッセージ本文

暗黙的に unsigned long long 型から unsigned long 型に型変換されています。

6.637.2 内容

より小さいデータ型への暗黙のキャストにより、情報を損失する可能性があります。

6.637.3 サンプルコード

extern void foo(unsigned long a);

void bar(unsigned long long a)
{
    unsigned long b = a; /* W0766 */
    foo(a); /* W0766 */
}

6.637.4 関連メッセージ

6.637.5 対応バージョン

1.0.0


Next: , Previous: W0766, Up: Messages

6.638 W0767

6.638.1 メッセージ本文

暗黙的に double 型から float 型に型変換されています。

6.638.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.638.3 サンプルコード

extern void foo(float a);

void bar(double a)
{
    float b = a; /* W0767 */
    foo(a); /* W0767 */
}

6.638.4 関連メッセージ

6.638.5 対応バージョン

1.0.0


Next: , Previous: W0767, Up: Messages

6.639 W0768

6.639.1 メッセージ本文

暗黙的に long double 型から float 型に型変換されています。

6.639.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.639.3 サンプルコード

extern void foo(float a);

void bar(long double a)
{
    float b = a; /* W0768 */
    foo(a); /* W0768 */
}

6.639.4 関連メッセージ

6.639.5 対応バージョン

1.0.0


Next: , Previous: W0768, Up: Messages

6.640 W0769

6.640.1 メッセージ本文

暗黙的に long double 型から double 型に型変換されています。

6.640.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.640.3 サンプルコード

extern void foo(double a);

void bar(long double a)
{
    double b = a; /* W0769 */
    foo(a); /* W0769 */
}

6.640.4 関連メッセージ

6.640.5 対応バージョン

1.0.0


Next: , Previous: W0769, Up: Messages

6.641 W0770

6.641.1 メッセージ本文

外部結合をもつ識別子 `%s' の宣言が、二つ以上存在しています。

6.641.2 内容

リンケージをもつオブジェクトおよび関数を複数のファイルで宣言する際は、その宣言に互換性があることを保証する必要があります。 これは、保守性を大きく低下させます。

6.641.3 サンプルコード

test1.h

extern int func(void); /* W0770 */

test2.h

extern int func(void); /* W0770 */

test.c

#include "test1.h"
#include "test2.h"

int func(void)
{
    return 0;
}

6.641.4 関連メッセージ

6.641.5 対応バージョン

1.0.0


Next: , Previous: W0770, Up: Messages

6.642 W0771

6.642.1 メッセージ本文

グローバルな識別子 `%s' が、二つ以上のファイルで宣言されています。

6.642.2 内容

リンケージをもつオブジェクトおよび関数を複数のファイルで宣言する際は、その宣言に互換性があることを保証する必要があります。 これは、保守性を大きく低下させます。

6.642.3 サンプルコード

test1.h

extern int func(void); /* W0771 */
extern int a; /* W0771 */

test2.h

extern int func(void); /* W0771 */
extern int a; /* W0771 */

test.c

#include "test1.h"
#include "test2.h"

6.642.4 関連メッセージ

6.642.5 対応バージョン

1.0.0


Next: , Previous: W0771, Up: Messages

6.643 W0774

6.643.1 メッセージ本文

double 型の値が関数 `float %s()' から返されています。

6.643.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.643.3 サンプルコード

extern double foo(void);

float bar(void)
{
    return foo(); /* W0774 */
}

6.643.4 関連メッセージ

6.643.5 対応バージョン

1.0.0


Next: , Previous: W0774, Up: Messages

6.644 W0775

6.644.1 メッセージ本文

long double 型の値が関数 `float %s()' から返されています。

6.644.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.644.3 サンプルコード

extern long double foo(void);

float bar(void)
{
    return foo(); /* W0775 */
}

6.644.4 関連メッセージ

6.644.5 対応バージョン

1.0.0


Next: , Previous: W0775, Up: Messages

6.645 W0776

6.645.1 メッセージ本文

long double 型の値が関数 `double %s()' から返されています。

6.645.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。

6.645.3 サンプルコード

extern long double foo(void);

double bar(void)
{
    return foo(); /* W0776 */
}

6.645.4 関連メッセージ

6.645.5 対応バージョン

1.0.0


Next: , Previous: W0776, Up: Messages

6.646 W0777

6.646.1 メッセージ本文

暗黙的に float 型の複合式から double 型に型変換されています。

6.646.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。 より大きい浮動小数点型への暗黙のキャストでは、大きな問題は起きませんが、暗黙のキャストは解析性にもデメリットがあるため推奨しません。

6.646.3 サンプルコード

void func(float a, float b)
{
    double c = a + b; /* W0777 */
}

6.646.4 関連メッセージ

6.646.5 対応バージョン

1.0.0


Next: , Previous: W0777, Up: Messages

6.647 W0778

6.647.1 メッセージ本文

暗黙的に float 型の複合式から long double 型に型変換されています。

6.647.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。 より大きい浮動小数点型への暗黙のキャストでは、大きな問題は起きませんが、暗黙のキャストは解析性にもデメリットがあるため推奨しません。

6.647.3 サンプルコード

void func(float a, float b)
{
    long double c = a + b; /* W0778 */
}

6.647.4 関連メッセージ

6.647.5 対応バージョン

1.0.0


Next: , Previous: W0778, Up: Messages

6.648 W0779

6.648.1 メッセージ本文

暗黙的に double 型の複合式から long double 型に型変換されています。

6.648.2 内容

より小さい浮動小数点型への暗黙のキャストにより、精度落ちになる可能性があります。 より大きい浮動小数点型への暗黙のキャストでは、大きな問題は起きませんが、暗黙のキャストは解析性にもデメリットがあるため推奨しません。

6.648.3 サンプルコード

void func(double a, double b)
{
    long double c = a + b; /* W0779 */
}

6.648.4 関連メッセージ

6.648.5 対応バージョン

1.0.0


Next: , Previous: W0779, Up: Messages

6.649 W0780

6.649.1 メッセージ本文

定数式における符号無し左シフト演算 `<<' は、非ゼロの上位ビットを切り詰めます。

6.649.2 内容

シフト演算の結果として上位ビットの情報が欠落してしまいます。 これが意図通りであれば問題ありませんが、意図通りでない場合は、不具合の原因になる可能性があります。

6.649.3 サンプルコード

unsigned int foo(void)
{
    return 0x08000000U << 5; /* W0780 */
}

6.649.4 関連メッセージ

なし。

6.649.5 対応バージョン

1.18.0


Next: , Previous: W0780, Up: Messages

6.650 W0781

6.650.1 メッセージ本文

この switch 文にはパスが 1 つしかありません。この switch 文は冗長です。

6.650.2 内容

このような switch 文がプログラマの意図通りだとしたら、 冗長な記述という意味で問題があります。 また、意図通りでないとしたら case 節の書き忘れが考えられますので、 動作上のバグが発生する可能性があります。 また、コードの閲覧者から見てプログラマの意図通りかどうかを判断できないという問題もあります。

6.650.3 サンプルコード

int foo(const int i)
{
    if (i > 5) {
        switch (i) { /* W0781 */
        case 0:
            return 1;
        case 5:
            return 2;
        default:
            return 3;
        }
    }

    switch (i) { /* OK */
    case 0:
        return 4;
    default:
        switch (i) { /* W0781 */
        case 10:
            return 5;
        default:
            return 6;
        }
    }
}

6.650.4 関連メッセージ

なし。

6.650.5 対応バージョン

1.6.0


Next: , Previous: W0781, Up: Messages

6.651 W0783

6.651.1 メッセージ本文

不完全型を指すポインタを含むキャストが行われています。このプログラムは移植性がありません。

6.651.2 内容

完全型から不完全型へのキャストは ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.651.3 サンプルコード

extern struct Foo *gp;

void foo(int *p)
{
    gp = (struct Foo *) p; /* W0783 */
}

6.651.4 関連メッセージ

なし。

6.651.5 対応バージョン

1.18.0


Next: , Previous: W0783, Up: Messages

6.652 W0784

6.652.1 メッセージ本文

非標準の拡張表記が使われています。

6.652.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

未定義の拡張表記を使用した場合の動作は未定義です。したがって、予期しない動作を引き起こす可能性があります。

6.652.3 サンプルコード

/* 追記予定 */

6.652.4 関連メッセージ

なし。

6.652.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W0784, Up: Messages

6.653 W0785

6.653.1 メッセージ本文

このタグ `%s' の宣言は、以前の宣言と異なります。

6.653.2 内容

構造体、共用体、列挙体は衝突しないように異なる識別子でタグ宣言する必要があります。 同じ識別子でタグ宣言されている構造体や共用体の動作は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.653.3 サンプルコード

struct AAA {
    int a;
};

union AAA { /* W0785 */
    long a;
    int b;
};

6.653.4 関連メッセージ

なし。

6.653.5 対応バージョン

1.0.0


Next: , Previous: W0785, Up: Messages

6.654 W0786

6.654.1 メッセージ本文

int、signed int、あるいは unsigned int 以外の型をもつビットフィールドは、ISO C 標準規格ではサポートされません。

6.654.2 内容

コンパイラの中には int 型以外のビットフィールドの使用を許すものがあります。 しかし、int 型以外のビットフィールドの動作は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.654.3 サンプルコード

struct ST { /* W0786 */
    unsigned int a:3;
    unsigned long b:1;
};

6.654.4 関連メッセージ

なし。

6.654.5 対応バージョン

1.0.0


Next: , Previous: W0786, Up: Messages

6.655 W0787

6.655.1 メッセージ本文

`%s' の型が、以前の異なるスコープで宣言された型と異なります。

6.655.2 内容

宣言が異なるスコープにある場合の動作は処理系定義になります。 また、宣言が同じスコープにある場合は標準制約違反になります。 従って、移植性が低下します。 ただし、一方がもう一方の内側のスコープで宣言される場合は問題ありません。

6.655.3 サンプルコード

void func1(void)
{
    extern int num;
    extern void func3(void);
}

void func2(void)
{
    extern double num; /* W0787 */
    extern void func3(int); /* W0787 */
}

6.655.4 関連メッセージ

6.655.5 対応バージョン

1.6.0


Next: , Previous: W0787, Up: Messages

6.656 W0788

6.656.1 メッセージ本文

`%s' の型が、以前の同じスコープ内で宣言された型と異なります。

6.656.2 内容

宣言が異なるスコープにある場合の動作は処理系定義になります。 また、宣言が同じスコープにある場合は標準制約違反になります。 従って、移植性が低下します。 ただし、一方がもう一方の内側のスコープで宣言される場合は問題ありません。

6.656.3 サンプルコード

extern int func(void);

void func(void) /* W0788 */
{
    typedef int num;
    double num; /* W0788 */
}

6.656.4 関連メッセージ

6.656.5 対応バージョン

1.6.0


Next: , Previous: W0788, Up: Messages

6.657 W0789

6.657.1 メッセージ本文

`%s' の型が、以前のより広いスコープで宣言された型と異なります。

6.657.2 内容

宣言が異なるスコープにある場合の動作は処理系定義になります。 また、宣言が同じスコープにある場合は標準制約違反になります。 従って、移植性が低下します。 ただし、一方がもう一方の内側のスコープで宣言される場合は問題ありません。

6.657.3 サンプルコード

int num = 0;
extern int func1(void);

void func2(void)
{
    extern double num; /* W0789 */
    extern void func1(void); /* W0789 */
}

6.657.4 関連メッセージ

6.657.5 対応バージョン

1.6.0


Next: , Previous: W0789, Up: Messages

6.658 W0790

6.658.1 メッセージ本文

グローバルなオブジェクトまたは関数 `%s' が二回以上定義されています。

6.658.2 内容

文法上の誤りではありませんので、重複定義そのものが原因で予期しない動作を引き起こすことはありません。 しかし、同じ識別子で複数回定義することは無駄な処理と言えます。 無駄なものは、メモリ資源を消費する、ソースコードの可読性を低下させる、などのデメリットがあります。

6.658.3 サンプルコード

int func(void)
{
    return 0;
}

int a = 0;

int func(void) /* W0790 */
{
    return 1;
}

int a = 1; /* W0790 */

6.658.4 関連メッセージ

6.658.5 対応バージョン

1.0.0


Next: , Previous: W0790, Up: Messages

6.659 W0791

6.659.1 メッセージ本文

グローバルなオブジェクトまたは関数 `%s' が二回以上定義されています。

6.659.2 内容

文法上の誤りではありませんので、重複定義そのものが原因で予期しない動作を引き起こすことはありません。 しかし、同じ識別子で複数回定義することは無駄な処理と言えます。 無駄なものは、メモリ資源を消費する、ソースコードの可読性を低下させる、などのデメリットがあります。

6.659.3 サンプルコード

test1.c

int func(void) /* W0791 */
{
    return 0;
}

int a = 0; /* W0791 */

test2.c

int func(void) /* W0791 */
{
    return 1;
}

int a = 1; /* W0791 */

6.659.4 関連メッセージ

6.659.5 対応バージョン

1.0.0


Next: , Previous: W0791, Up: Messages

6.660 W0792

6.660.1 メッセージ本文

浮動小数点数型を関数ポインタ(あるいはその逆)へキャストしています。

6.660.2 内容

関数ポインタから浮動小数点型へのキャスト、またはその逆のキャストは未定義の動作になります。従って、予期しない動作を引き起こす可能性があります。

6.660.3 サンプルコード

int (*foo(const float f))(void)
{
    return (int (*)(void)) f; /* W0792 */
}

6.660.4 関連メッセージ

なし。

6.660.5 対応バージョン

1.18.0


Next: , Previous: W0792, Up: Messages

6.661 W0793

6.661.1 メッセージ本文

関数ポインタをオブジェクトを指すポインタ(あるいはその逆)へキャストしています。

6.661.2 内容

オブジェクトを指すポインタから関数ポインタへのキャスト、またはその逆の黄やストは未定義の動作になります。 従って、予期しない動作を引き起こす可能性があります。

6.661.3 サンプルコード

typedef int (*funptr_t)(void);

funptr_t foo(float *p)
{
    return (funptr_t) p; /* W0793 */
}

6.661.4 関連メッセージ

なし。

6.661.5 対応バージョン

1.18.0


Next: , Previous: W0793, Up: Messages

6.662 W0794

6.662.1 メッセージ本文

符号付きのオペランドを左シフト演算しています。

6.662.2 内容

整数の負の値をどのように表現するかは規格で定義されているわけではありません。 従って、符号付き型の値に対して左シフト演算をした結果は、コンパイラに依存することになり、移植性が低下します。

6.662.3 サンプルコード

int func(int i)
{
    return i << 1; /* W0794 */
}

6.662.4 関連メッセージ

なし。

6.662.5 対応バージョン

1.18.0


Next: , Previous: W0794, Up: Messages

6.663 W0795

6.663.1 メッセージ本文

関数呼び出しの実引数の数が、関数プロトタイプ宣言の仮引数の数よりも少ないです。

6.663.2 内容

このような記述は、言語制約違反になりますので、移植性を低下させます。 また、スタックを破壊する可能性があるため危険です。

6.663.3 サンプルコード

extern void foo(int, int, int);

static void bar(void)
{
    foo(1, 2); /* W0795 */
}

6.663.4 関連メッセージ

6.663.5 対応バージョン

1.0.0


Next: , Previous: W0795, Up: Messages

6.664 W0796

6.664.1 メッセージ本文

関数呼び出しの実引数の数が、関数プロトタイプ宣言の仮引数の数よりも多いです。

6.664.2 内容

このような記述は、言語制約違反になりますので、移植性を低下させます。 また、スタックを破壊する可能性があるため危険です。

6.664.3 サンプルコード

extern void foo(int, int);

static void bar(void)
{
    foo(1, 2, 3); /* W0796 */
}

6.664.4 関連メッセージ

6.664.5 対応バージョン

1.0.0


Next: , Previous: W0796, Up: Messages

6.665 W0797

6.665.1 メッセージ本文

関数呼び出しの実引数の数が、関数定義における仮引数の数とは異なります。

6.665.2 内容

このような記述は、言語制約違反になりますので、移植性を低下させます。 また、スタックを破壊する可能性があるため危険です。

6.665.3 サンプルコード

static int foo(int, int);

static int bar(void)
{
    int a = foo(1); /* W0795 */
    int b = foo(1, 2);
    int c = foo(1, 2, 3); /* W0795 */
}

static int foo(int a, int b)
{
    return a + b;
}

6.665.4 関連メッセージ

6.665.5 対応バージョン

1.0.0


Next: , Previous: W0797, Up: Messages

6.666 W0798

6.666.1 メッセージ本文

不完全な共用体オブジェクトの値を使ってはいけません。

6.666.2 内容

オブジェクトの値が必要な文脈で、不完全型をもつ左辺値を用いるような式は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.666.3 サンプルコード

extern union UN *p;

void func(void)
{
    int i = 0;

    if (p) {
        i = p->i; /* W0798 */
    }
}

6.666.4 関連メッセージ

6.666.5 対応バージョン

1.0.0


Next: , Previous: W0798, Up: Messages

6.667 W0799

6.667.1 メッセージ本文

不完全な構造体オブジェクトの値を使ってはいけません。

6.667.2 内容

オブジェクトの値が必要な文脈で、不完全型をもつ左辺値を用いるような式は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.667.3 サンプルコード

extern struct ST *p;

void func(void)
{
    int i = 0;

    if (p) {
        i = p->i; /* W0799 */
    }
}

6.667.4 関連メッセージ

6.667.5 対応バージョン

1.0.0


Next: , Previous: W0799, Up: Messages

6.668 W0800

6.668.1 メッセージ本文

`%s' は結合をもたない不完全型です。これは未定義です。

6.668.2 内容

オブジェクトの値が必要な文脈で、不完全型をもつ左辺値を用いるような式は ISO C90 で未定義なので、予期しない動作を引き起こす可能性があります。

6.668.3 サンプルコード

int a[]; /* W0800 */
struct ST s = { 0 }; /* W0800 */

6.668.4 関連メッセージ

6.668.5 対応バージョン

1.0.0


Next: , Previous: W0800, Up: Messages

6.669 W0801

6.669.1 メッセージ本文

この構造体あるいは共用体には名前付きのメンバがありません。

6.669.2 内容

名前付きのメンバを一つも持たない構造体または共用体を使用したときの動作は未定義です。 従って、予期しない動作を引き起こす可能性があります。

6.669.3 サンプルコード

struct foo { /* W0801 */
};

struct bar { /* W0801 */
    int;
    int :1;
    long;
    double;
};

6.669.4 関連メッセージ

なし。

6.669.5 対応バージョン

1.4.0


Next: , Previous: W0801, Up: Messages

6.670 W0802

6.670.1 メッセージ本文

`#include' 前処理指令の後が、<ファイル名> あるいは "ファイル名" 形式のどちらでもありません。

6.670.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

#include <ファイル名> または #include "ファイル名" 以外の形式で記述されている #include 文の動作は未定義になります。 従って、予期しない動作を引き起こす可能性があります。"

6.670.3 サンプルコード

#include fruits.h /* W0802 */

#define MACRO 1
#include MACRO /* W0802 */

6.670.4 関連メッセージ

なし。

6.670.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W0802, Up: Messages

6.671 W0803

6.671.1 メッセージ本文

関数形式マクロの実引数の中に、前処理指令が記述されています。

6.671.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.671.3 サンプルコード

/* 追記予定 */

6.671.4 関連メッセージ

なし。

6.671.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W0803, Up: Messages

6.672 W0804

6.672.1 メッセージ本文

defined 構文が、`defined(識別子)' あるいは `defined 識別子' のどちらでもありません。

6.672.2 内容

このような記述は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。

6.672.3 サンプルコード

#if defined "MACRO" /* W0804 */
#endif

6.672.4 関連メッセージ

6.672.5 対応バージョン

1.0.0


Next: , Previous: W0804, Up: Messages

6.673 W0805

6.673.1 メッセージ本文

`defined' に、実引数となる識別子がありません。

6.673.2 内容

このような記述は未定義の動作になります。したがって、予期しない動作を引き起こす可能性があります。

6.673.3 サンプルコード

#if defined "foo" /* W0805 */
int i = 0;
#endif

6.673.4 関連メッセージ

6.673.5 対応バージョン

1.16.0


Next: , Previous: W0805, Up: Messages

6.674 W0806

6.674.1 メッセージ本文

`defined' という名称のマクロを定義しようとしています。

6.674.2 内容

ISO C90 で規定されている予約語を定義、再定義、定義解消することは未定義の動作になります。 したがって、予期しない動作を引き起こす可能性あります。

6.674.3 サンプルコード

#define defined !defined /* W0806 */

6.674.4 関連メッセージ

6.674.5 対応バージョン

1.4.0


Next: , Previous: W0806, Up: Messages

6.675 W0807

6.675.1 メッセージ本文

事前定義のマクロ名 `%s' を削除しようとしています。

6.675.2 内容

ISO C90 で規定されている予約語を定義、再定義、定義解消することは未定義の動作になります。 したがって、予期しない動作を引き起こす可能性あります。

6.675.3 サンプルコード

#undef __STDC_VERSION__ /* W0807 */

6.675.4 関連メッセージ

6.675.5 対応バージョン

1.6.0


Next: , Previous: W0807, Up: Messages

6.676 W0808

6.676.1 メッセージ本文

事前定義のマクロ名 `%s' を再定義しようとしています。

6.676.2 内容

ISO C90 で規定されている予約語を定義、再定義、定義解消することは未定義の動作になります。 したがって、予期しない動作を引き起こす可能性あります。

6.676.3 サンプルコード

#define __FILE__ "test.c" /* W0808 */

6.676.4 関連メッセージ

6.676.5 対応バージョン

1.6.0


Next: , Previous: W0808, Up: Messages

6.677 W0809

6.677.1 メッセージ本文

識別子 `%s' はライブラリで予約済みです。

6.677.2 内容

ISO C90 で規定されている予約語を再使用することは未定義の動作になります。 したがって、予期しない動作を引き起こす可能性あります。

6.677.3 サンプルコード

extern int __value; /* W0809 */
int _VAL = 10; /* W0809 */
static void _func(void); /* W0809 */

6.677.4 関連メッセージ

なし。

6.677.5 対応バージョン

1.6.0


Next: , Previous: W0809, Up: Messages

6.678 W0810

6.678.1 メッセージ本文

この `if-if-else' 文の構造をより明確にするためには `{}' が必要です。

6.678.2 内容

サンプルコードのようなコードでは、else がどちらの if に対応するのかが不明確です。 また、本体が単一文で済まなくなったときに、波括弧をつけ忘れるリスクもあります。

6.678.3 サンプルコード

int foo(int i, int j) {
    if (i < 0) /* W0810 */
        if (j > 0) {
            return 0;
        }
    else {
        return 1;
    }

    if (i > 0) /* W0810 */
        if (j < 0) {
            return 2;
        }
        else {
            return 3;
        }

    return 4;
}

6.678.4 関連メッセージ

なし。

6.678.5 対応バージョン

1.0.0


Next: , Previous: W0810, Up: Messages

6.679 W0811

6.679.1 メッセージ本文

このマクロの展開結果の、`defined' トークンは、許容されません。

6.679.2 内容

このような記述は、未定義の動作のため、予期しない動作を引き起こす可能性があります。

6.679.3 サンプルコード

#define COND defined(FOO)

#if COND /* W0811 */
int i = 0;
#endif

6.679.4 関連メッセージ

なし。

6.679.5 対応バージョン

1.16.0


Next: , Previous: W0811, Up: Messages

6.680 W0827

6.680.1 メッセージ本文

ネストされた構造体の初期値の各要素が `{}' で囲まれていません。

6.680.2 内容

構造体を 0 以外で初期化する場合は、構造を示し、初期化子は波括弧 "{}" で囲まなければなりません。

6.680.3 サンプルコード

struct ST {
    int i;
    int j;
};

struct ST a[2] = { 10, 20, 30, 40 }; /* W0827 */

6.680.4 関連メッセージ

6.680.5 対応バージョン

1.0.0


Next: , Previous: W0827, Up: Messages

6.681 W0828

6.681.1 メッセージ本文

ネストされた配列の初期値の各要素が `{}' で囲まれていません。

6.681.2 内容

配列を 0 以外で初期化する場合は、構造を示し、初期化子は波括弧 "{}" で囲まなければなりません。

6.681.3 サンプルコード

int a[3][2] = { {1, 2}, {3, 4}, {5, 6} };
int b[3][2] = { 1, 2, 3, 4, 5, 6 }; /* W0828 */

6.681.4 関連メッセージ

6.681.5 対応バージョン

1.0.0


Next: , Previous: W0828, Up: Messages

6.682 W0830

6.682.1 メッセージ本文

列挙子並びの末尾にカンマ `,' があります。

6.682.2 内容

このような記述は、言語拡張に該当するため、移植性を低下させます。

6.682.3 サンプルコード

enum Color { Red, Green, Blue, }; /* W0830 */

6.682.4 関連メッセージ

なし。

6.682.5 対応バージョン

1.18.0


Next: , Previous: W0830, Up: Messages

6.683 W0831

6.683.1 メッセージ本文

これはインラインアセンブリ用の言語拡張です。#asm と #endasm の間は無視します。

6.683.2 内容

インライン・アセンブラ構文は、言語拡張に該当するため、移植性を低下させます。

6.683.3 サンプルコード

/* 追記予定 */

6.683.4 関連メッセージ

6.683.5 対応バージョン

1.0.0


Next: , Previous: W0831, Up: Messages

6.684 W0832

6.684.1 メッセージ本文

インラインアセンブリ構文を使っています。これは言語拡張です。このコードは無視します。

6.684.2 内容

インライン・アセンブラ構文は、言語拡張に該当するため、移植性を低下させます。

6.684.3 サンプルコード

#define ASM_CODE asm("movl %ecx, %eax")

void foo(int arg1, int *arg2, int arg3)
{
    asm("movl %ecx, %eax"); /* W0832 */
    __asm__("movl %ecx, (%eax)"); /* W0832 */

    asm { /* W0832 */
        xorl eax, eax
    }

    ASM_CODE; /* W0832 */

    __asm__ volatile ( /* W0832 */
            "int $0x80"
            : "=a" (r)
              "+b" (arg1),
              "+c" (arg2),
              "+d" (arg3)
            : "a" (128)
            : "memory", "cc");
}

6.684.4 関連メッセージ

6.684.5 対応バージョン

1.8.0


Next: , Previous: W0832, Up: Messages

6.685 W0833

6.685.1 メッセージ本文

接尾語 LL を使っています。

6.685.2 内容

接尾語 LL は、言語拡張に該当するため、移植性を低下させます。

6.685.3 サンプルコード

long long ll = 123LL; /* W0833 */

6.685.4 関連メッセージ

6.685.5 対応バージョン

1.18.0


Next: , Previous: W0833, Up: Messages

6.686 W0834

6.686.1 メッセージ本文

long long 型を使っています。

6.686.2 内容

long long 型は、言語拡張に該当するため、移植性を低下させます。

6.686.3 サンプルコード

extern long long ll; /* W0834 */

6.686.4 関連メッセージ

6.686.5 対応バージョン

1.18.0


Next: , Previous: W0834, Up: Messages

6.687 W0835

6.687.1 メッセージ本文

可変引数を受け取るマクロが定義されています。

6.687.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

可変個引数マクロの定義は、言語拡張に該当するため、移植性を低下させます。

6.687.3 サンプルコード

/* 追記予定 */

6.687.4 関連メッセージ

なし。

6.687.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W0835, Up: Messages

6.688 W0947

6.688.1 メッセージ本文

文字列リテラルが直接使われています。

6.688.2 内容

リテラルが何を表しているのか分かり難く、保守性に悪影響を及ぼします。

6.688.3 サンプルコード

func("Apple, Banana, Chocolate"); /* W0947 */

6.688.4 関連メッセージ

6.688.5 対応バージョン

1.0.0


Next: , Previous: W0947, Up: Messages

6.689 W0948

6.689.1 メッセージ本文

文字定数 %s が直接使われています。

6.689.2 内容

リテラルが何を表しているのか分かり難く、保守性に悪影響を及ぼします。

6.689.3 サンプルコード

func('a'); /* W0948 */

6.689.4 関連メッセージ

6.689.5 対応バージョン

1.0.0


Next: , Previous: W0948, Up: Messages

6.690 W0949

6.690.1 メッセージ本文

ビットフィールドのサイズ定義に、数値 `%s' が直接使われています。

6.690.2 内容

リテラルが何を表しているのか分かり難く、保守性に悪影響を及ぼします。

6.690.3 サンプルコード

struct ST {
    unsigned int a:1;
    unsigned int a:2; /* W0949 */
    unsigned int a:3; /* W0949 */
};

6.690.4 関連メッセージ

6.690.5 対応バージョン

1.0.0


Next: , Previous: W0949, Up: Messages

6.691 W0950

6.691.1 メッセージ本文

配列のサイズ定義に、数値 `%s' が直接使われています。

6.691.2 内容

リテラルが何を表しているのか分かり難く、保守性に悪影響を及ぼします。

6.691.3 サンプルコード

int a[10]; /* W0950 */

6.691.4 関連メッセージ

6.691.5 対応バージョン

1.0.0


Next: , Previous: W0950, Up: Messages

6.692 W1026

6.692.1 メッセージ本文

%s 番目の実引数がオブジェクト型ではありません。

6.692.2 内容

不完全型の構造体や配列を仮引数にしています。関数の全ての仮引数はオブジェクト型の式である必要があります。

6.692.3 サンプルコード

extern struct st s;
extern void foo(struct st);

void bar(void)
{
    foo(s); /* W1026 */
}

6.692.4 関連メッセージ

なし。

6.692.5 対応バージョン

1.18.0


Next: , Previous: W1026, Up: Messages

6.693 W1027

6.693.1 メッセージ本文

配列の基本型が関数型です。これは意味がありません。

6.693.2 内容

関数の配列が存在しています。

6.693.3 サンプルコード

int (fun_tbl[20])(void); /* W1027 */

6.693.4 関連メッセージ

6.693.5 対応バージョン

1.0.0


Next: , Previous: W1027, Up: Messages

6.694 W1028

6.694.1 メッセージ本文

配列の基本型がサイズ不明の配列です。不完全型の配列は構築できません。

6.694.2 内容

この配列は不完全型で定義されています。これは誤りです。

6.694.3 サンプルコード

int a[4][]; /* W1028 */

6.694.4 関連メッセージ

6.694.5 対応バージョン

1.0.0


Next: , Previous: W1028, Up: Messages

6.695 W1029

6.695.1 メッセージ本文

配列の基本型が内容不明の構造体あるいは共用体です。不完全型の配列は構築できません。

6.695.2 内容

この配列は、不完全な要素を持つ構造体または共用体を型として定義しています。

6.695.3 サンプルコード

struct ST a[5]; /* W1029 */

6.695.4 関連メッセージ

6.695.5 対応バージョン

1.0.0


Next: , Previous: W1029, Up: Messages

6.696 W1030

6.696.1 メッセージ本文

ラベル `%s' がこの関数の中で二回以上使われています。

6.696.2 内容

同じ名前のラベルが、関数内で 2 回以上使われています。このような使い方は誤りです。

6.696.3 サンプルコード

void func(int a, int b)
{
    if (a == 0) {
        int c = 0;
RETRY:
        b = 10;
    }

    if (b != 0) {
        goto RETRY;
    }
RETRY: /* W1030 */
    b = 1;

    ...snip...
}

6.696.4 関連メッセージ

なし。

6.696.5 対応バージョン

1.6.0


Next: , Previous: W1030, Up: Messages

6.697 W1031

6.697.1 メッセージ本文

オブジェクト `%s' は、外部結合と内部結合の両方で宣言されています。その動作は未定義です。

6.697.2 内容

同じ名前の変数が 2 回以上定義されていて、その 1 つには static 宣言がついています。このような使い方は誤りです。

6.697.3 サンプルコード

test.h

extern int a;

test.c

#include "test.h"

static int a; /* W1031 */

6.697.4 関連メッセージ

なし。

6.697.5 対応バージョン

1.0.0


Next: , Previous: W1031, Up: Messages

6.698 W1032

6.698.1 メッセージ本文

内部結合をもつ変数 '%s' の仮定義は、不完全型ではいけません。

6.698.2 内容

内部結合を持つオブジェクトの仮定義でのうち、後で示されたほうにに明示的な定義が見つかりません。このような使い方は誤りです。

6.698.3 サンプルコード

static struct ST a[3]; /* W1032 */

6.698.4 関連メッセージ

なし。

6.698.5 対応バージョン

1.0.0


Next: , Previous: W1032, Up: Messages

6.699 W1033

6.699.1 メッセージ本文

関数の戻り値の型に volatile あるいは const 修飾子を使っています。その動作は未定義です。

6.699.2 内容

関数の戻り値の型が、volatile 型の場合の動作は処理系定義です。 また、const 型の場合は未定義です。

6.699.3 サンプルコード

extern const int func1(int); /* W1033 */

const int func2(int i) /* W1033 */
{
    return i + 1;
}

const int *func3(int i) /* OK */
{
    static int j;

    j = i;
    return &j;
}

6.699.4 関連メッセージ

なし。

6.699.5 対応バージョン

1.4.0


Next: , Previous: W1033, Up: Messages

6.700 W1034

6.700.1 メッセージ本文

ブロックスコープで、関数 `%s()' に static 記憶域クラス指定子を使って宣言されています。この用法は意味がありません。

6.700.2 内容

static な関数がブロックスコープ内で宣言されています。 関数宣言はブロック・スコープの場合 static を使用できません。

6.700.3 サンプルコード

int func(void)
{
    static int func1(void); /* W1034 */
    extern int func2(void);
}

6.700.4 関連メッセージ

なし。

6.700.5 対応バージョン

1.0.0


Next: , Previous: W1034, Up: Messages

6.701 W1035

6.701.1 メッセージ本文

`%s' は typedef として宣言されています。明示的な型指定子を使わずに、より内側のスコープで再宣言することはできません。

6.701.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

typedef の再定義は未定義の動作になります。

6.701.3 サンプルコード

/* 追記予定 */

6.701.4 関連メッセージ

6.701.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W1035, Up: Messages

6.702 W1036

6.702.1 メッセージ本文

`%s' は typedef として宣言されています。明示的な型指定子を使わずに、構造体または共用体のメンバとして再宣言することはできません。

6.702.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

typedef の再定義は未定義の動作になります。

6.702.3 サンプルコード

/* 追記予定 */

6.702.4 関連メッセージ

6.702.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W1036, Up: Messages

6.703 W1037

6.703.1 メッセージ本文

外部結合をもつ `%s' が、二つ以上宣言されていますが互換性がありません。

6.703.2 内容

外部結合を持つ同一の識別子を複数宣言する際は、すべての宣言において、 その型(関数の宣言の場合は、戻り値の型、結合、例外仕様)に互換性を保証する必要があります。

6.703.3 サンプルコード

test1.c

extern void func(void); /* W1037 */
extern int a; /* W1037 */

test2.c

extern int func(int); /* W1037 */
extern long a; /* W1037 */

6.703.4 関連メッセージ

なし。

6.703.5 対応バージョン

1.0.0


Next: , Previous: W1037, Up: Messages

6.704 W1039

6.704.1 メッセージ本文

%s 番目の指定子に `ll' が使われています。

6.704.2 内容

'll' を変換指定子に使用しています。このような記述は ISO C90 では認められていません。

6.704.3 サンプルコード

extern int printf(const char *, ...);

void foo(long long ll)
{
    printf("%lld", ll); /* W1039 */
}

6.704.4 関連メッセージ

なし。

6.704.5 対応バージョン

1.18.0


Next: , Previous: W1039, Up: Messages

6.705 W1040

6.705.1 メッセージ本文

前処理指令の後に認識できない文字列が記述されています。

6.705.2 内容

このような前処理指令の記述は、ISO C90 標準規格ではサポートされていません。

6.705.3 サンプルコード

#define TEST

#ifdef TEST
#if defined(CASE_1)
int i = 1;
#elif defined(CASE_2)
int i = 2;
#endif CASE /* W1040 */
#else
int i = 0;
#endif TEST /* W1040 */

6.705.4 関連メッセージ

6.705.5 対応バージョン

1.16.0


Next: , Previous: W1040, Up: Messages

6.706 W1041

6.706.1 メッセージ本文

`%s' は、ISO C 標準規格の正式な前処理指令ではありません。

6.706.2 内容

このような前処理指令の記述は、ISO C90 標準規格ではサポートされていません。

6.706.3 サンプルコード

#compiler_specific_extension 1 2.3 "4" /* W1041 */

6.706.4 関連メッセージ

6.706.5 対応バージョン

1.16.0


Next: , Previous: W1041, Up: Messages

6.707 W1042

6.707.1 メッセージ本文

前処理指令の中で sizeof 演算子を使っています。これは言語拡張です。

6.707.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

このような前処理指令の記述は、ISO C90 標準規格ではサポートされていません。

6.707.3 サンプルコード

/* 追記予定 */

6.707.4 関連メッセージ

6.707.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W1042, Up: Messages

6.708 W1043

6.708.1 メッセージ本文

`@ address' は、ISO C 標準規格ではサポートされていません。言語拡張と見なします。

6.708.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

このような構文記述は、ISO C90 標準規格ではサポートされていないため、言語拡張とみなされます。

6.708.3 サンプルコード

/* 追記予定 */

6.708.4 関連メッセージ

6.708.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W1043, Up: Messages

6.709 W1045

6.709.1 メッセージ本文

この `@ word' 構文は無視されます。

6.709.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

このような構文記述は、ISO C90 標準規格ではサポートされていないため、言語拡張とみなされます。

6.709.3 サンプルコード

/* 追記予定 */

6.709.4 関連メッセージ

6.709.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W1045, Up: Messages

6.710 W1046

6.710.1 メッセージ本文

`\' と改行の間にある空白文字類が無視されています。

6.710.2 内容

ISO C 規格ではバックスラッシュ文字の後に直接改行文字が続くべきであると規定しています。

6.710.3 サンプルコード

#define FOO(a, b)   /* OK */    \
    (               /* W1046 */ \ 
        (a) + (b)   /* W1046 */ \	
    )

6.710.4 関連メッセージ

なし。

6.710.5 対応バージョン

1.16.0


Next: , Previous: W1046, Up: Messages

6.711 W1047

6.711.1 メッセージ本文

構造体、共用体、あるいは配列の初期化子がリテラルではありません。

6.711.2 内容

初期化子が定数式になっていません。

6.711.3 サンプルコード

int foo(int i, int j)
{
    int a[] = { 0, i, j }; /* W1047 */
    return a[1];
}

6.711.4 関連メッセージ

なし。

6.711.5 対応バージョン

1.18.0


Next: , Previous: W1047, Up: Messages

6.712 W1048

6.712.1 メッセージ本文

マルチバイト文字リテラルは処理系定義の値になります。

6.712.2 内容

このメッセージは AdLint 2.0.0 以降で出力する予定です。

マルチバイト文字定数が使用されています。この値やサイズは処理系によって異なるため、移植性が低下します。

6.712.3 サンプルコード

/* 追記予定 */

6.712.4 関連メッセージ

なし。

6.712.5 対応バージョン

2.0.0 以降の予定


Next: , Previous: W1048, Up: Messages

6.713 W1049

6.713.1 メッセージ本文

この整数式の符号付き整数型への変換結果は、符号付きの結果の型で表現できないことがあります。

6.713.2 内容

char が 8bit の場合、signed char 型は -128~127 の範囲しか表現できません。したがって、例 1 では表現できないことがあります。この場合、結果は "処理系定義" になります。 符号なし演算の結果は、オーバーフローせず、ラップアラウンドします。例 2 では、ラップアラウンドし結果が切り詰められる可能性があります。

6.713.3 サンプルコード

例 1

void func1(signed int si)
{
    signed char sc = (signed char) si + 10; /* W1049 */
}

例 2

void func(unsigned int ui)
{
    unsigned int a = ui * ui;
}

6.713.4 関連メッセージ

6.713.5 対応バージョン

1.0.0


Next: , Previous: W1049, Up: Messages

6.714 W1050

6.714.1 メッセージ本文

この整数式の符号付き整数型への変換結果は、符号付きの結果の型で表現できません。

6.714.2 内容

char が 8bit の場合、signed char 型は -128~127 の範囲しか表現できません。したがって、例 1 では表現できないことがあります。この場合、結果は "処理系定義" になります。 符号なし演算の結果は、オーバーフローせず、ラップアラウンドします。例 2 では、ラップアラウンドし結果が切り詰められる可能性があります。

6.714.3 サンプルコード

例 1

void func(signed int si)
{
    signed char sc = 0;

    if (si > 127) {
        sc = (signed char) si + 1; /* W1050 */
    }
}

例 2

void func(unsigned int ui)
{
    unsigned int a = ui * ui;
}

6.714.4 関連メッセージ

6.714.5 対応バージョン

1.0.0


Next: , Previous: W1050, Up: Messages

6.715 W1051

6.715.1 メッセージ本文

符号無し型 `%s' の算術演算結果は、桁あふれによって 0 を回り込みます。

6.715.2 内容

符号なし演算の結果は、オーバーフローせずラップアラウンドし、結果が切り詰められる可能性があります。

6.715.3 サンプルコード

unsigned int func(unsigned int ui)
{
    if (ui > 0xEFFFFFFFU) {
        return ui + 0x10000000U; /* W1051 */
    }

    return 0U;
}

6.715.4 関連メッセージ

6.715.5 対応バージョン

1.0.0


Next: , Previous: W1051, Up: Messages

6.716 W1052

6.716.1 メッセージ本文

符号無し型 `%s' の算術演算結果は、桁あふれによって 0 を回り込むことがあります。

6.716.2 内容

符号なし演算の結果は、オーバーフローせずラップアラウンドし、結果が切り詰められる可能性があります。

6.716.3 サンプルコード

unsigned int func(unsigned int a, unsigned int b)
{
    if (a > 0xEFFFFFFFU && b < 0x20000000U) {
        return a + b; /* W1052 */
    }

    return 0U;
}

6.716.4 関連メッセージ

6.716.5 対応バージョン

1.0.0


Next: , Previous: W1052, Up: Messages

6.717 W1053

6.717.1 メッセージ本文

仮引数が列挙型である関数の実引数に数値定数が渡されています。

6.717.2 内容

非列挙型から列挙型への変換が生じています。

6.717.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

extern void func1(enum Color);

void func2(void)
{
    func1(4); /* W1053 */
}

6.717.4 関連メッセージ

6.717.5 対応バージョン

1.6.0


Next: , Previous: W1053, Up: Messages

6.718 W1054

6.718.1 メッセージ本文

列挙型に、列挙型ではない式が代入されています。

6.718.2 内容

非列挙型から列挙型への変換が生じています。

6.718.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

extern enum Color col;

void func2(void)
{
    col = 4; /* W1054 */
}

6.718.4 関連メッセージ

6.718.5 対応バージョン

1.6.0


Next: , Previous: W1054, Up: Messages

6.719 W1055

6.719.1 メッセージ本文

戻り値が列挙型の関数から、列挙型ではない式が返されています。

6.719.2 内容

列挙型から非列挙型への変換が生じています。

6.719.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

enum Color func(void)
{
    return 4; /* W1055 */
}

6.719.4 関連メッセージ

6.719.5 対応バージョン

1.6.0


Next: , Previous: W1055, Up: Messages

6.720 W1056

6.720.1 メッセージ本文

仮引数が列挙型である関数の実引数が異なる列挙型のオブジェクトです。

6.720.2 内容

列挙型から異なる列挙型への変換が生じています。

6.720.3 サンプルコード

enum Color { RED = 1, GREEN= 2, BLUE = 4 };
enum Season { SPRING = 1, SUMMER, AUTUMN, WINTER };

extern void func1(enum Color);

void func2(enum Season ssn)
{
    func1(ssn); /* W1056 */
}

6.720.4 関連メッセージ

6.720.5 対応バージョン

1.6.0


Next: , Previous: W1056, Up: Messages

6.721 W1057

6.721.1 メッセージ本文

列挙型に、異なる列挙型のオブジェクトが代入されています。

6.721.2 内容

列挙型から異なる列挙型への変換が生じています。

6.721.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };
enum Season { SPRING = 1, SUMMER, AUTUMN, WINTER };

extern enum Color col;

void func(enum Season ssn)
{
    col = ssn; /* W1057 */
}

6.721.4 関連メッセージ

6.721.5 対応バージョン

1.6.0


Next: , Previous: W1057, Up: Messages

6.722 W1058

6.722.1 メッセージ本文

戻り値が列挙型の関数から、異なる列挙型のオブジェクトが返されています。

6.722.2 内容

列挙型から異なる列挙型への変換が生じています。

6.722.3 サンプルコード

enum Color { RED  = 1, GREEN = 2, BLUE = 4 };
enum Season { SPRING = 1, SUMMER, AUTUMN, WINTER };

enum Color func(enum Season ssn)
{
    return ssn; /* W1058 */
}

6.722.4 関連メッセージ

6.722.5 対応バージョン

1.6.0


Next: , Previous: W1058, Up: Messages

6.723 W1059

6.723.1 メッセージ本文

仮引数が列挙型でない関数の実引数に列挙型が渡されています。

6.723.2 内容

列挙型から非列挙型への変換が生じています。

6.723.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

extern void func1(int num);

void func2(enum Color col)
{
    func1(col); /* W1059 */
}

6.723.4 関連メッセージ

6.723.5 対応バージョン

1.6.0


Next: , Previous: W1059, Up: Messages

6.724 W1060

6.724.1 メッセージ本文

戻り値が列挙型でない関数から、列挙型が返されています。

6.724.2 内容

非列挙型から列挙型への変換が生じています。

6.724.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

int func2(enum Color col)
{
    return col; /* W1060 */
}

6.724.4 関連メッセージ

6.724.5 対応バージョン

1.6.0


Next: , Previous: W1060, Up: Messages

6.725 W1061

6.725.1 メッセージ本文

仮引数が列挙型である関数の実引数に異なる型の非定数式の値が渡されています。

6.725.2 内容

非列挙型から列挙型への変換が生じています。

6.725.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

extern void func1(enum Color);

void func2(int num)
{
    func1(num); /* W1061 */
}

6.725.4 関連メッセージ

6.725.5 対応バージョン

1.6.0


Next: , Previous: W1061, Up: Messages

6.726 W1062

6.726.1 メッセージ本文

異なる型の非定数式の値が列挙型オブジェクトに代入されています。

6.726.2 内容

非列挙型から列挙型への変換が生じています。

6.726.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

extern enum Color col;

void func(int num)
{
    col = num + 1; /* W1062 */
}

6.726.4 関連メッセージ

6.726.5 対応バージョン

1.6.0


Next: , Previous: W1062, Up: Messages

6.727 W1063

6.727.1 メッセージ本文

戻り値が列挙型の関数から、異なる型の非定数式の値が返されています。

6.727.2 内容

非列挙型から列挙型への変換が生じています。

6.727.3 サンプルコード

enum Color { RED = 1, GREEN = 2, BLUE = 4 };

enum Color func(int num)
{
    return num / 2; /* W1063 */
}

6.727.4 関連メッセージ

6.727.5 対応バージョン

1.6.0


Next: , Previous: W1063, Up: Messages

6.728 W1064

6.728.1 メッセージ本文

列挙型の制御式が使われている switch 文で、整数定数が case ラベルに使われています。

6.728.2 内容

非列挙型から列挙型への変換が生じています。

6.728.3 サンプルコード

enum Color { RED, BLUE, GREEN };

int func(enum Color c)
{
    switch (c) {
    case RED: /* OK */
        return 1;
    case 1: /* W1064 */
        return 2;
    }

    return 0;
}

6.728.4 関連メッセージ

6.728.5 対応バージョン

1.4.0


Next: , Previous: W1064, Up: Messages

6.729 W1065

6.729.1 メッセージ本文

列挙型の制御式が使われている switch 文で、異なる列挙型の値が case ラベルに使われています。

6.729.2 内容

列挙型から異なる列挙型への変換が生じています。

6.729.3 サンプルコード

enum Color { RED, BLUE, GREEN };
enum Fruits { APPLE, BANANA, ORANGE, GRAPE };

int func(enum Color c)
{
    switch (c) {
    case RED: /* OK */
        return 1;
    case ORANGE: /* W1065 */
        return 2;
    }

    return 0;
}

6.729.4 関連メッセージ

6.729.5 対応バージョン

1.4.0


Next: , Previous: W1065, Up: Messages

6.730 W1066

6.730.1 メッセージ本文

明示的に float 型の複合式の値を double 型に変換しています。

6.730.2 内容

例えばサンプルコードでは float 型変数 a の 2 乗した値が float 型の範囲に収まらないことを想定して double 型変数 b へ代入しています。しかし、環境によっては a * a の演算はいったん float 型として 結果を出したあとに double 型にキャストされ、b へ代入される場合があります。その場合、a の値によっては精度落ちが起こります。

6.730.3 サンプルコード

void func(float a)
{
    double b = (double) (a * a);
}

6.730.4 関連メッセージ

6.730.5 対応バージョン

1.14.0


Next: , Previous: W1066, Up: Messages

6.731 W1067

6.731.1 メッセージ本文

明示的に float 型の複合式の値を long double 型に変換しています。

6.731.2 内容

例えばサンプルコードでは float 型変数 a の 2 乗した値が float 型の範囲に収まらないことを想定して long double 型変数 b へ代入しています。しかし、環境によっては a * a の演算はいったん float 型として 結果を出したあとに long double 型にキャストされ、b へ代入される場合があります。その場合、a の値によっては精度落ちが起こります。

6.731.3 サンプルコード

void func(float a)
{
    long double b = (long double) (a * a);
}

6.731.4 関連メッセージ

6.731.5 対応バージョン

1.14.0


Next: , Previous: W1067, Up: Messages

6.732 W1068

6.732.1 メッセージ本文

明示的に double 型の複合式の値を long double 型に変換しています。

6.732.2 内容

例えばサンプルコードでは double 型変数 a の 2 乗した値が double 型の範囲に収まらないことを想定して long double 型変数 b へ代入しています。しかし、環境によっては a * a の演算はいったん double 型として 結果を出したあとに long double 型にキャストされ、b へ代入される場合があります。その場合、a の値によっては精度落ちが起こります。

6.732.3 サンプルコード

void func(double a)
{
    long double b = (long double) (a * a);
}

6.732.4 関連メッセージ

6.732.5 対応バージョン

1.14.0


Next: , Previous: W1068, Up: Messages

6.733 W1069

6.733.1 メッセージ本文

この `if-else-if' 文には、末尾の `else' 節がありません。

6.733.2 内容

else 節がないと、 else 節を書き忘れているのか、 else 節が発生しない if-else if 文なのかが分からず、混乱を招きます。

6.733.3 サンプルコード

static int func(int i)
{
    if (i == 2) { /* W1069 */
        return 0;
    }
    else if (i == 4) {
        return 1;
    }
    return 2;
}

6.733.4 関連メッセージ

なし。

6.733.5 対応バージョン

1.14.0


Next: , Previous: W1069, Up: Messages

6.734 W1070

6.734.1 メッセージ本文

この `switch' 文には実行経路が 2 つしか無いため、`if-else' 文に変換可能です。

6.734.2 内容

深刻な問題ではありませんが、通常 switch 文は 2 つ以上の分岐があることが想定されるので、 case 節が 1 つしかない switch 文では、実行パスの定義漏れが疑われます。

6.734.3 サンプルコード

switch (x) { /* W1070 */
case 1:
    ...
    break;
default:
    ...
}

6.734.4 関連メッセージ

なし。

6.734.5 対応バージョン

1.14.0


Next: , Previous: W1070, Up: Messages

6.735 W1071

6.735.1 メッセージ本文

関数 `%s' には複数の終了点があります。

6.735.2 内容

出口となる return 文が関数内に複数個存在しています。

6.735.3 サンプルコード

void foo(int i) /* W1071 */
{
    if (i == 0) {
        return;
    }
}

6.735.4 関連メッセージ

なし。

6.735.5 対応バージョン

1.18.0


Next: , Previous: W1071, Up: Messages

6.736 W1072

6.736.1 メッセージ本文

`goto' 文を使用しています。

6.736.2 内容

ファイル内で goto 文が使用されています。

6.736.3 サンプルコード

static int func(int i)
{
    if (i == 1) {
        goto Label1; /* W1072 */
    }

    goto Label2; /* W1072 */

Label1:
    i = 10;
Label2:
    i = 20;
    return i;
}

6.736.4 関連メッセージ

なし。

6.736.5 対応バージョン

1.14.0


Next: , Previous: W1072, Up: Messages

6.737 W1073

6.737.1 メッセージ本文

関数 `%s' の戻り値を破棄しています。

6.737.2 内容

関数の戻り値が使用されていない場合、その戻り値は無駄な要素といえます。コード中に無駄な要素があることで解析性が低下します。 また、使用されない戻り値が多いことは、戻り値のチェックも怠っていることが推測されるため、障害許容性が低下している可能性が高いといえます。

6.737.3 サンプルコード

extern int bar(void);
static void foo(void)
{
    int i;
    int j;
    for (i = 0, bar(); i < 10; i++) { /* W1073 */
        j = bar(); /* OK */
    }
}

6.737.4 関連メッセージ

なし。

6.737.5 対応バージョン

1.16.0


Next: , Previous: W1073, Up: Messages

6.738 W1074

6.738.1 メッセージ本文

`sizeof' 演算子のオペランドは実行されないため、副作用が発生しません。

6.738.2 内容

サンプルコードで示したソースコードの場合、sizeof 演算子は式を評価しないため、data++ は実行されません。 従って data++ が実行されていることが前提だとすると様々な予期しない問題が起きる可能性があります。

6.738.3 サンプルコード

static int foo(void)
{
    int i = 0;

    if (sizeof(i++) == 4) { /* W1074 */
        return 0;
    }
    else {
        return 1;
    }
}

6.738.4 関連メッセージ

なし。

6.738.5 対応バージョン

1.16.0


Next: , Previous: W1074, Up: Messages

6.739 W1075

6.739.1 メッセージ本文

`%s' は以前に内部結合として宣言されていますが、この宣言には `static' がありません。

6.739.2 内容

static 記憶域クラス指定子が明示されていません。

6.739.3 サンプルコード

static int func(void);
int func(void) /* W1075 */
{
    ...
}

6.739.4 関連メッセージ

なし。

6.739.5 対応バージョン

1.16.0


Next: , Previous: W1075, Up: Messages

6.740 W1076

6.740.1 メッセージ本文

関数 `%s' は内部結合を持ちますが、事前に内部結合として宣言していません。

6.740.2 内容

関数プロトタイプ宣言がないまま static 記憶域クラス指定子付きの関数が定義されています。

6.740.3 サンプルコード

static int func(void) /* W1076 */
{
    return 0;
}

6.740.4 関連メッセージ

なし。

6.740.5 対応バージョン

1.16.0


Next: , Previous: W1076, Up: Messages

6.741 W1077

6.741.1 メッセージ本文

サイズが省略された配列を宣言しています。

6.741.2 内容

この配列は、サイズが明示されていません。

6.741.3 サンプルコード

extern int a[]; /* W1077 */

6.741.4 関連メッセージ

なし。

6.741.5 対応バージョン

1.16.0


Next: , Previous: W1077, Up: Messages

6.742 W9001

6.742.1 メッセージ本文

この文には制御が到達しません。

6.742.2 内容

この実行経路に至るための分岐条件が常に偽と評価されるため、この文は実行されるこ とがありません。

6.742.3 サンプルコード

extern int all_possible_values_of_int(void);
extern unsigned int zero_if_succeeded(void);

void func(void)
{
    int i = all_possible_values_of_int();

    if (i < 0) {
        unsigned int ui = zero_if_succeeded();

        if (ui > 0) {
            return;
        }

        /* "ui" is equal to zero at this point */

        /* Always be true?  No, it'll be false all the time */
        if (i < ui) {
            return; /* W9001: Control never reaches here! */
        }
        /*
         * ISO standard says;
         *   Usual Arithmetic Conversion performed before evaluating
         *   the expression "i < ui".
         * Usual Arithmetic Conversion makes "i < ui" into
         * "(unsigned int) i < ui" and then the value of "i" which
         * is less than 0 will be converted into a new value which
         * is greater than 0 because of the wrap-around.
         * So, the expression ("a value greater than 0" < 0) makes
         * always false.
         */
    }
}

6.742.4 関連メッセージ

なし。

6.742.5 対応バージョン

1.0.0


Next: , Previous: W9001, Up: Messages

6.743 W9002

6.743.1 メッセージ本文

ファイルの末尾に改行文字がありません。

6.743.2 内容

プリプロセッサによって処理する行は、すべて末尾に改行文字が必要です。

6.743.3 サンプルコード

なし。

6.743.4 関連メッセージ

なし。

6.743.5 対応バージョン

1.0.0


Next: , Previous: W9002, Up: Messages

6.744 W9003

6.744.1 メッセージ本文

暗黙的に `%s' 型のオブジェクトが `%s' 型のオブジェクトに変換されています。

6.744.2 内容

変換元または変換先の型が非標準型である暗黙的な変換が発生することを示します。

6.744.3 サンプルコード

enum Color { RED, BLUE, GREEN };
enum Fruit { APPLE, BANANA, ORANGE };

extern void foo(enum Color);

static void bar(void)
{
    int i = RED; /* W9003 */
    foo(ORANGE); /* W9003 */
}

6.744.4 関連メッセージ

なし。

6.744.5 対応バージョン

1.12.0


Next: , Previous: W9003, Up: Messages

6.745 C0001

6.745.1 メッセージ本文

この識別名 `%s' で警告を検知しました。

6.745.2 内容

W0051、W0052、W0491、W0492、 W0703、W0770、W0771、W0787、 W0788、W0789、W0790、W0791、 W1037 メッセージの直後に出力され、問題となる識別子の対となる識別子の位置を示します。

6.745.3 サンプルコード

int very_long_long_long_long_long_long_long_identifier_2 = 1; /* W0052 */
int very_long_long_long_long_long_long_long_identifier_1 = 0; /* C0001 */

6.745.4 関連メッセージ

6.745.5 対応バージョン

1.0.0


Next: , Previous: C0001, Up: Messages

6.746 C1000

6.746.1 メッセージ本文

次の実行パスで警告を検知しました。

6.746.2 内容

W0093、W0096、W0097、W0115、 W0116、W0421、W0422、W0423、 W0424、W0459、W0460、W0461、 W0462、W0568、W0569、W0570、 W0607、W0608、W0705、W0707、 W0720、W0745、W1049、W1050 メッセージの直後に出力され、このメッセージの後に問題を検出した状況を補足するメ ッセージが続くことを示します。

6.746.3 サンプルコード

 1: int foo(int i)
 2: {
 3:     int j; /* C1003 */
 4: 
 5:     if (i < 0) { /* C1001 */
 6:         if (i < -10) { /* C1002 */
 7:             j = 2;
 8:         }
 9:         else if (i < -5) { /* C1002 */
10:             j = 3;
11:         }
12:     }
13:     else {
14:         j = 1;
15:     }
16: 
17:     return j; /* W0460 */
18: }

a.c:17:12:warning:c_builtin:W0460:UNC:X99:変数 `j' の値は、この式の評価時点では設定されていないことがあります。
:::context:c_builtin:C1000:INF:X99:次の実行パスで警告を検知しました。
a.c:3:9:context:c_builtin:C1003:INF:X99:ここで該当変数が初期値を指定せずに定義されています。
a.c:5:11:context:c_builtin:C1001:INF:X99:この制御式を真として評価しました。
a.c:6:15:context:c_builtin:C1002:INF:X99:この制御式を偽として評価しました。
a.c:9:20:context:c_builtin:C1002:INF:X99:この制御式を偽として評価しました。

6.746.4 関連メッセージ

6.746.5 対応バージョン

3.2.0


Next: , Previous: C1000, Up: Messages

6.747 C1001

6.747.1 メッセージ本文

この制御式を真として評価しました。

6.747.2 内容

W0093、W0096、W0097、W0115、 W0116、W0421、W0422、W0423、 W0424、W0459、W0460、W0461、 W0462、W0568、W0569、W0570、 W0607、W0608、W0705、W0707、 W0720、W0745、W1049、W1050 メッセージを検出した状況として、該当制御式を真と評価したことを示します。

6.747.3 サンプルコード

int foo(int i)
{
    int j; /* C1003 */

    if (i < 0) { /* C1001 */
        if (i < -10) { /* C1002 */
            j = 2;
        }
        else if (i < -5) { /* C1002 */
            j = 3;
        }
    }
    else {
        j = 1;
    }

    return j; /* W0460 */
}

6.747.4 関連メッセージ

6.747.5 対応バージョン

3.2.0


Next: , Previous: C1001, Up: Messages

6.748 C1002

6.748.1 メッセージ本文

この制御式を偽として評価しました。

6.748.2 内容

W0093、W0096、W0097、W0115、 W0116、W0421、W0422、W0423、 W0424、W0459、W0460、W0461、 W0462、W0568、W0569、W0570、 W0607、W0608、W0705、W0707、 W0720、W0745、W1049、W1050 メッセージを検出した状況として、該当制御式を偽と評価したことを示します。

6.748.3 サンプルコード

int foo(int i)
{
    int j; /* C1003 */

    if (i < 0) { /* C1001 */
        if (i < -10) { /* C1002 */
            j = 2;
        }
        else if (i < -5) { /* C1002 */
            j = 3;
        }
    }
    else {
        j = 1;
    }

    return j; /* W0460 */
}

6.748.4 関連メッセージ

6.748.5 対応バージョン

3.2.0


Next: , Previous: C1002, Up: Messages

6.749 C1003

6.749.1 メッセージ本文

ここで該当変数が初期値を指定せずに定義されています。

6.749.2 内容

W0459、W0460、W0461、W0462 メッセージを検出した状況として、どの位置で該当変数を定義したかを示します。

6.749.3 サンプルコード

int foo(int i)
{
    int j; /* C1003 */

    if (i < 0) { /* C1001 */
        if (i < -10) { /* C1002 */
            j = 2;
        }
        else if (i < -5) { /* C1002 */
            j = 3;
        }
    }
    else {
        j = 1;
    }

    return j; /* W0460 */
}

6.749.4 関連メッセージ

6.749.5 対応バージョン

3.2.0


Next: , Previous: C1003, Up: Messages

6.750 C1004

6.750.1 メッセージ本文

ここで該当変数に NULL の値を割り当てました。

6.750.2 内容

W0421、W0422、W0423、W0424 メッセージを検出した状況として、どの位置で該当変数に NULL を割り当てたかを示し ます。

6.750.3 サンプルコード

extern int *bar(void);
extern int *baz(void);

void foo(int i)
{
    int *p = NULL; /* C1004 */

    if (i < 0) { /* C1002 */
        p = bar();
        if (!p) {
            return;
        }
    }
    else {
        p = baz(); /* C1005 */
    }

    *p += 2; /* W0422 */
}

6.750.4 関連メッセージ

6.750.5 対応バージョン

3.2.0


Next: , Previous: C1004, Up: Messages

6.751 C1005

6.751.1 メッセージ本文

ここで該当変数に NULL の可能性がある値を割り当てました。

6.751.2 内容

W0421、W0422、W0423、W0424 メッセージを検出した状況として、どの位置で該当変数に NULL となり得る値を割り当 てたかを示します。

6.751.3 サンプルコード

extern int *bar(void);
extern int *baz(void);

void foo(int i)
{
    int *p = NULL; /* C1004 */

    if (i < 0) { /* C1002 */
        p = bar();
        if (!p) {
            return;
        }
    }
    else {
        p = baz(); /* C1005 */
    }

    *p += 2; /* W0422 */
}

6.751.4 関連メッセージ

6.751.5 対応バージョン

3.2.0


Previous: C1005, Up: Messages

6.752 C1006

6.752.1 メッセージ本文

ここで該当変数に値を割り当てました。

6.752.2 内容

W0093、W0096、W0097、W0115、 W0116、W0568、W0569、W0570、 W0607、W0608、W0705、W0707、 W0720、W0745、W1049、W1050 メッセージを検出した状況として、どの位置で該当変数に問題の値を割り当てたかを示 します。

6.752.3 サンプルコード

int foo(int i)
{
    int j = 0; /* C1006 */

    if (i < 0) { /* C1002 */
        j = -i;
    }
    else if (i > 0) { /* C1002 */
        j = i;
    }

    return 5 / j; /* W0093 */
}

6.752.4 関連メッセージ

6.752.5 対応バージョン

3.2.0


Next: , Previous: Messages, Up: Top

7 メトリクス一覧


Next: , Up: Metrics

7.1 FL_STMT

7.1.1 メトリック名

ファイル内の文の数

7.1.2 内容

ファイル内に言語の構文規則としてステートメント(文)と認識されるものの数を示しま す。

7.1.3 サンプルコード

int foo(int a)
{
    int i = 0;  /* A declaration is not a statement */

    if (a > 0) {  /* An if-else-statement makes FL_STMT += 1 */
        i = a + 1;  /* An expression-statement makes FL_STMT += 1 */
    }
    else {
        ;  /* An empty expression-statement makes FL_STMT += 1 */
    }

    return i;  /* A jump-statement makes FL_STMT += 1 */
}

/* Now, FL_STMT == 4 */

void bar(int a)
{
    struct {  /* A declaration is not a statement */
        int i;
    } s;

    /* A for-statement which has 2 expression-statements (`s.i=0;' and `s.i<a;') makes FL_STMT += 3 */
    for (s.i = 0; s.i < a; s.i++) {
        switch (s.i % 3) {  /* A switch-statement makes FL_STMT += 1 */
        case 0:             /* A label is part of a labeled-statement, but it makes FL_STMT += 1 */
            puts("A\n");    /* A labeled expression-statement makes FL_STMT += 1 */
            break;          /* A jump-statement makes FL_STMT += 1 */
        case 1:             /* A label is part of a labeled-statement, but it makes FL_STMT += 1 */
            puts("B\n");    /* A labeled expression-statement makes FL_STMT += 1 */
            break;          /* A jump-statement makes FL_STMT += 1 */
        case 2:             /* A label is part of a labeled-statement, but it makes FL_STMT += 1 */
            puts("C\n");    /* A labeled expression-statement makes FL_STMT += 1 */
            break;          /* A jump-statement makes FL_STMT += 1 */
        }
    }
}

/* Finally, FL_STMT == 17 */
     MET,FL_STMT,test.c,17

7.1.4 対応バージョン

1.0.0


Next: , Previous: FL_STMT, Up: Metrics

7.2 FL_FUNC

7.2.1 メトリック名

ファイル内の関数定義の数

7.2.2 内容

ファイル内に定義されている関数の数を示します。

7.2.3 サンプルコード

void foo(void) {}  /* A function-definition makes FL_FUNC += 1 */

static void bar(void) {}  /* A function-definition makes FL_FUNC += 1 */

extern void baz(void);  /* A declaration is not a function-definition */

int qux(a, b)  /* An old style function-definition makes FL_FUNC += 1 */
    int a, b;
{
    return a + b;
}

/* FL_FUNC == 3 */
     MET,FL_FUNC,test.c,3

7.2.4 対応バージョン

1.0.0


Next: , Previous: FL_FUNC, Up: Metrics

7.3 FN_STMT

7.3.1 メトリック名

関数内の文の数

7.3.2 内容

関数内に言語の構文規則としてステートメント(文)と認識されるものの数を示します。

7.3.3 サンプルコード

int foo(int a)
{
    int i = 0;  /* A declaration is not a statement */

    if (a > 0) {  /* An if-else-statement makes foo's FN_STMT += 1 */
        i = a + 1;  /* An expression-statement makes foo's FN_STMT += 1 */
    }
    else {
        ;  /* An empty expression-statement makes foo's FN_STMT += 1 */
    }

    return i;  /* A jump-statement makes foo's FN_STMT += 1 */

    /* foo's FN_STMT == 4 */
}

void bar(int a)
{
    struct {  /* A declaration is not a statement */
        int i;
    } s;

    /* A for-statement which has 2 expression-statements (`s.i=0;' and * `s.i<a;') makes bar's FN_STMT += 3 */
    for (s.i = 0; s.i < a; s.i++) {
        switch (s.i % 3) {  /* A switch-statement makes bar's FN_STMT += 1 */
        case 0:             /* A label is part of a labeled-statement, but it makes bar's FN_STMT += 1 */
            puts("A\n");    /* A labeled expression-statement makes bar's FN_STMT += 1 */
            break;          /* A jump-statement makes bar's FN_STMT += 1 */
        case 1:             /* A label is part of a labeled-statement, but it makes bar's FN_STMT += 1 */
            puts("B\n");    /* A labeled expression-statement makes bar's FN_STMT += 1 */
            break;          /* A jump-statement makes bar's FN_STMT += 1 */
        case 2:             /* A label is part of a labeled-statement, but it makes bar's FN_STMT += 1 */
            puts("C\n");    /* A labeled expression-statement makes bar's FN_STMT += 1 */
            break;          /* A jump-statement makes bar's FN_STMT += 1 */
        }
    }

    /* bar's FN_STMT == 13 */
}
     MET,FN_STMT,foo,int foo(int),test.c,1,5,4
     MET,FN_STMT,bar,void bar(int),test.c,14,6,13

7.3.4 対応バージョン

1.0.0


Next: , Previous: FN_STMT, Up: Metrics

7.4 FN_UNRC

7.4.1 メトリック名

関数内の制御が到達しない文の数

7.4.2 内容

いかなる条件でも実行されることのないステートメントの数を示します。

7.4.3 サンプルコード

#include <stdlib.h>

int foo(int i)
{
    unsigned int ui;

    if (i < 0) {
        switch (i) {
        case -3:
            ui = 0;
            break;
        /* Control never reaches to this "case 3:" clause because "i" is less than 0 at this point */
        case 3:      /* This label is part of an unreachable labeled-statement, but it makes foo's FN_UNRC += 1 */
            ui = 1;  /* An unreachable labeled expression-statement makes FN_UNRC += 1 */
            break;   /* An unreachable jump-statement makes FN_UNRC += 1 */
        default:
            ui = 0;
        }

        /* "ui" is equal to 0 at this point */

        /*
         * The usual-arithmetic-conversion makes "i < ui" into "(unsigned int) i < ui".
         * Then, the value of "i" which is less than 0 will be converted into the new value which is greater than 0
         * because of the wrap-around.
         * So, "(value which is greater than 0) < 0" makes false at all times.
         */
        if (i < ui) {
            exit(0);  /* An unreachable expression-statement makes FN_UNRC += 1 */
        }
    }
    else {
        /* "i" is greater than or equal to 0 at this point */

        abort();  /* The abort() standard function terminates this execution path */
    }

    /* "i" is less than 0 at this point */

    if (i == 3) {   /* "(value which is less than 0) == 3" makes false at all times */
        return -1;  /* An unreachable jump-statement makes FN_UNRC += 1 */
    }

    return 0;

    /* foo's FN_UNRC == 5 */
}
     MET,FN_UNRC,foo,int foo(int),test.c,3,5,5

7.4.4 対応バージョン

1.0.0


Next: , Previous: FN_UNRC, Up: Metrics

7.5 FN_LINE

7.5.1 メトリック名

関数内の保守コード行数

7.5.2 内容

関数定義の開始行から関数定義の終了行までの物理行数を示します。

7.5.3 サンプルコード

int foo(void)  /* foo's function definition starts here */
{
    return 0;
}  /* foo's function definition ends here */

/* foo's FN_LINE == 3 */

int
bar  /* bar's function definition starts here */
(void)
{
    return 0;
}  /* bar's function definition ends here */

/* bar's FN_LINE == 5 */

int
baz  /* baz's old style function definition starts here */
(a)
int a;
{
    return 0;
}  /* baz's old style function definition ends here */

/* baz's FN_LINE == 6 */
     MET,FN_LINE,foo,int foo(void),test.c,1,5,3
     MET,FN_LINE,bar,int bar(void),test.c,8,1,5
     MET,FN_LINE,baz,int baz(int),test.c,17,1,6

7.5.4 対応バージョン

1.0.0


Next: , Previous: FN_LINE, Up: Metrics

7.6 FN_PARA

7.6.1 メトリック名

関数の仮引数の数

7.6.2 内容

関数定義の引数リスト内に宣言された仮引数の数を示します。

7.6.3 サンプルコード

int foo(int a, long b, char *p)
{
    return 0;
}
/* foo's FN_PARA == 3 */

int bar(a, b, p)  /* An old style function definition */
    long b;  /* A type-specifier of "a" is omitted */
    char *p;
{
    return 0;
}
/* bar's FN_PARA == 3 */
     MET,FN_PARA,foo,"int foo(int,long,char *)",test.c,1,5,3
     MET,FN_PARA,bar,"int bar(int,long,char *)",test.c,6,5,3

7.6.4 対応バージョン

1.0.0


Next: , Previous: FN_PARA, Up: Metrics

7.7 FN_UNUV

7.7.1 メトリック名

関数内の未使用および再使用されない変数の数

7.7.2 内容

使用されないにも関わらず宣言されている変数、および、値を割り当てた後に使用され ない変数の数を示します。

7.7.3 サンプルコード

void foo(int i, int j)  /* A useless declaration of "j" makes FN_UNUV += 1 */
{
    int a;
    int b;
    int c = 0;  /* A useless declaration of "c" makes FN_UNUV += 1 */

    if (i < 0) {
        a = -i;
    }
    else {
        a = i;
    }

    b = a * 2;  /* A useless assignment to "b" makes FN_UNUV += 1 */
    printf("%d\n", a);

    /* foo's FN_UNUV == 3 */
}
     MET,FN_UNUV,foo,"void foo(int,int)",test.c,1,6,3

7.7.4 対応バージョン

1.0.0


Next: , Previous: FN_UNUV, Up: Metrics

7.8 FN_CSUB

7.8.1 メトリック名

関数内の子関数コールの数

7.8.2 内容

関数内にて他の関数を呼び出す箇所数を示します。

7.8.3 サンプルコード

extern int foo(int);

static int bar(int);

int baz(int i)
{
    int j = foo(i);  /* A function-call-expression makes baz's FN_CSUB += 1 */

    return foo(bar(j)); /* 2 function-call-expressions makes baz's FN_CSUB += 2 */

    /* baz's FN_CSUB == 3 */
}
     MET,FN_CSUB,baz,int baz(int),test.c,5,5,3

7.8.4 対応バージョン

1.0.0


Next: , Previous: FN_CSUB, Up: Metrics

7.9 FN_CALL

7.9.1 メトリック名

他の関数から被呼び出し箇所数

7.9.2 内容

該当する関数がプロジェクト中の他の関数から呼び出される箇所数を示します。

7.9.3 サンプルコード

test1.c

int foo(int i) { return i + 1; }

int bar(int i)
{
    return foo(i) + 1;  /* A function-call-expression makes foo's FN_CALL += 1 */
}

test2.c

extern int bar(int);

static void baz(void)
{
    int i = bar(0);  /* A function-call-expression makes bar's FN_CALL += 1 and foo's FN_CALL += 1 */
}

project-name.met.csv

     MET,FN_CALL,foo,int foo(int),test1.c,1,5,2
     MET,FN_CALL,bar,int bar(int),test1.c,3,5,1
     MET,FN_CALL,baz,void baz(void),test2.c,3,13,0

7.9.4 対応バージョン

1.0.0


Next: , Previous: FN_CALL, Up: Metrics

7.10 FN_GOTO

7.10.1 メトリック名

関数内の goto 文の数

7.10.2 内容

関数内に記された goto 文の数を示します。

7.10.3 サンプルコード

int foo(int i)
{
    switch (i) {
    case 0:
        goto ZERO;  /* A goto-statement makes foo's FN_GOTO += 1 */
    case 1:
        goto ONE;   /* A goto-statement makes foo's FN_GOTO += 1 */
    default:
        return 0;
    }

ZERO:
    return 1;

ONE:
    return 2;

    /* foo's FN_GOTO == 2 */
}
     MET,FN_GOTO,foo,int foo(int),test.c,1,5,2

7.10.4 対応バージョン

1.0.0


Next: , Previous: FN_GOTO, Up: Metrics

7.11 FN_RETN

7.11.1 メトリック名

関数内の戻り点の数

7.11.2 内容

実行される return 文の数、および、関数末尾にある暗黙の return 文 の数を示します。

7.11.3 サンプルコード

void foo(int i)
{
    if (i < 0) {
        return;  /* A return-statement makes foo's FN_RETN += 1 */
    }

    if (i >= 10) {
        return;  /* A return-statement makes foo's FN_RETN += 1 */
    }
    else {
        for (; i < 10; i++) {
          printf("%d\n", i);
        }
    }

    /* An implicit return from the function whose return type is void makes foo's FN_RETN * += 1 */

    /* foo's FN_RETN == 3 */
}

int bar(int i)
{
    if (i < 0) {
        return -1;  /* A return-statement makes bar's FN_RETN += 1 */
    }

    if (i >= 10) {
        return -1;  /* A return-statement makes bar's FN_RETN += 1 */
    }
    else {
        for (; i < 10; i++) {
          printf("%d\n", i);
        }
    }

    return 0;  /* A return-statement makes bar's FN_RETN += 1 */

    /* bar's FN_RETN == 3 */
}
     MET,FN_RETN,foo,void foo(int),test.c,1,6,3
     MET,FN_RETN,bar,int bar(int),test.c,20,5,3

7.11.4 対応バージョン

1.0.0


Next: , Previous: FN_RETN, Up: Metrics

7.12 FN_UELS

7.12.1 メトリック名

関数内の完結していない if-else 文の数

7.12.2 内容

関数内の if-else 文で、明示的な else 節を持たないものの数を示しま す。

7.12.3 サンプルコード

int foo(int i)
{
    int j;

    if (i < 0) {
        return -1;
    }
    else {
        j = i + 1;
    }

    if (j % 2) {
        return -1;
    }
    /* A standalone if-statement does nothing to the FN_UELS metric */

    if (i == 2) {
        return 0;
    }
    else if (i == 4) {
        return 1;
    }
    /* An implicit else clause makes foo's FN_UELS += 1 */

    return 5;

    /* foo's FN_UELS == 1 */
}
     MET,FN_UELS,foo,int foo(int),test.c,1,5,1

7.12.4 対応バージョン

1.0.0


Next: , Previous: FN_UELS, Up: Metrics

7.13 FN_NEST

7.13.1 メトリック名

関数内のネスティングの最深段数

7.13.2 内容

関数内で制御構造のネストが一番深い部分のネスト段数を示します。

7.13.3 サンプルコード

void foo(int i)
{
    /* Nesting level == 0 */

    if (i < 0) {
        /* Nesting level == 1 */

        switch (i) {
            /* Nesting level == 2 */
        case -1:
            return;
        case -2:
            puts("A\n");
            break;
        }

        /* Nesting level == 1 */
    }
    else {
        /* Nesting level == 1 */
        int j;
        int k;

        for (j = 0; j < i; j++) {
            /* Nesting level == 2 */

            for (k = 0; k < 10; k++) {
                /* Nesting level == 3 */

                if (j == k) {
                    /* Nesting level == 4 */
                    puts("B\n");
                }
            }
        }
    }

    /* foo's FN_NEST == 4 */
}
     MET,FN_NEST,foo,void foo(int),test.c,1,6,4

7.13.4 対応バージョン

1.0.0


Next: , Previous: FN_NEST, Up: Metrics

7.14 FN_PATH

7.14.1 メトリック名

関数内の推定静的パス数

7.14.2 内容

関数の制御フロー内で考えられるすべての実行経路の数を示します。

7.14.3 サンプルコード

static int foo(int i)
{
    /* A */
    if (i == 0) {
        /* B */
        i = 0;
    }
    else {
        /* C */
        i = 1;
    }
    /* D */
    return i;

    /* Possible execute paths A->B->D and A->C->D makes foo's FN_PATH = 2 */
}

static int bar(int i)
{
    /* A */
    if (i == 0) {
        /* B */
        i = 0;
    }
    /* C */
    if (i == 1) {
        /* D */
        i = 1;
    }
    /* E */
    if (i == 2) {
        /* F */
        i = 2;
    }
    /* G */
    return i;

    /* Possible execute paths
         A->B->C->D->E->F->G,
         A->B->C->D->E->G,
         A->B->C->E->F->G,
         A->B->C->E->G,
         A->C->D->E->F->G,
         A->C->D->E->G,
         A->C->E->F->G,
         A->C->E->G
       makes bar's FN_PATH = 8 */
}

static int baz(int i)
{
    /* A */
    switch (i) {
    case 0:
        /* B */
        if (rand()) {
            /* C */
            i = 0;
        }
        else {
            /* D */
            i = 0;
        }
        /* E */
        i = 0;
        break;
    default:
        /* F */
        if (rand()) {
            /* G */
            i = 1;
        }
        else {
            /* H */
            i = 1;
        }
        /* I */
        i = 1;
        break;
    }
    /* J */
    return i;

    /* Possible execute paths
         A->B->C->E->J,
         A->B->D->E->J,
         A->F->G->I->J,
         A->F->H->I->J
       makes baz's FN_PATH = 4 */
}

static int qux(int i)
{
    /* A */
    while (i < 5) {
        /* B */
        if (i == 0) {
            /* C */
            return 0;
        }
        /* D */
        if (i == 1) {
            /* E */
            return 1;
        }
    }
    /* F */
    if (i == 2) {
        /* G */
        return 2;
    }
    /* H */
    return 3;

    /* Possible execute paths
         A->B->C,
         A->B->D->E,
         A->B->D->F->G,
         A->B->D->F->H,
         A->F->G,
         A->F->H
       makes qux's FN_PATH = 6 */
}
     MET,FN_PATH,foo,int foo(int),test.c,1,12,2
     MET,FN_PATH,bar,int bar(int),test.c,18,12,8
     MET,FN_PATH,baz,int baz(int),test.c,42,12,4
     MET,FN_PATH,qux,int qux(int),test.c,80,12,6

7.14.4 対応バージョン

1.0.0


Previous: FN_PATH, Up: Metrics

7.15 FN_CYCM

7.15.1 メトリック名

関数の経路複雑度

7.15.2 内容

McCabe(マッケーブ)の提唱したメトリックで、プログラムを構成する線上にある独立し たパスの数を示します。

計算式「制御フローグラフのエッジ数 - ノード数 + 2」で算出し、関数中の分 岐の数に 1 を足したものに等しくなります。

7.15.3 サンプルコード

static int foo(int i)
{
    if (i == 0) {  /* Complexity += 1 */
        i = 0;
    }
    else {  /* An else branch does not grow the complexity */
        i = 1;
    }
    return i;

    /* foo's FN_CYCM == 2 */
}

static int bar(int i)
{
    if (i == 0) {  /* Complexity += 1 */
        i = 0;
    }
    if (i == 1) {  /* Complexity += 1 */
        i = 1;
    }
    if (i == 2) {  /* Complexity += 1 */
        i = 2;
    }
    return i;

    /* bar's FN_CYCM == 4 */
}

static int baz(int i)
{
    switch (i) {
    case 0:  /* Complexity += 1 */
        if (rand()) {  /* Complexity += 1 */
            i = 0;
        }
        else {  /* An else branch does not grow the complexity */
            i = 0;
        }
        i = 0;
        break;
    default:  /* A default clause does not grow the complexity */
        if (rand()) {  /* Complexity += 1 */
            i = 1;
        }
        else {  /* An else branch does not grow the complexity */
            i = 1;
        }
        i = 1;
        break;
    }
    return i;

    /* baz's FN_CYCM == 4 */
}

static int qux(int i)
{
    while (i < 5) {  /* An iteration does not grow the complexity */
        if (i == 0) {  /* Complexity += 1 */
            return 0;
        }
        if (i == 1) {  /* Complexity += 1 */
            return 1;
        }
    }
    if (i == 2) {  /* Complexity += 1 */
        return 2;
    }
    return 3;

    /* qux's FN_CYCM == 4 */
}
     MET,FN_CYCM,foo,int foo(int),test.c,1,12,2
     MET,FN_CYCM,bar,int bar(int),test.c,13,12,4
     MET,FN_CYCM,baz,int baz(int),test.c,28,12,4
     MET,FN_CYCM,qux,int qux(int),test.c,54,12,4

7.15.4 対応バージョン

1.0.0


Next: , Previous: Metrics, Up: Top

8 コード情報一覧


Next: , Up: CodeStructures

8.1 VER

8.1.1 コード情報名

バージョンレコード

8.1.2 内容

解析に使用した AdLint のバージョンや、実行日時を記録します。

8.1.3 サンプルコード

バージョンレコードの出力例を参照。

8.1.4 対応バージョン

1.0.0


Next: , Previous: VER, Up: CodeStructures

8.2 DCL(T)

8.2.1 コード情報名

型宣言レコード

8.2.2 内容

typedef、struct、union、enum による型宣言について、 宣言位置、型の種別、型名などを出力します。

8.2.3 サンプルコード

宣言レコードの出力例を参照。

8.2.4 対応バージョン

1.0.0


Next: , Previous: DCL(T), Up: CodeStructures

8.3 DCL(V)

8.3.1 コード情報名

外部変数宣言レコード

8.3.2 内容

外部リンケージを持つグローバル変数の宣言について、宣言位置、変数名、変数型を出 力します。

8.3.3 サンプルコード

宣言レコードの出力例を参照。

8.3.4 対応バージョン

1.0.0


Next: , Previous: DCL(V), Up: CodeStructures

8.4 DCL(F)

8.4.1 コード情報名

関数宣言レコード

8.4.2 内容

外部リンケージを持つ関数宣言について、宣言位置、関数名、関数シグニチャ情報を出 力します。

8.4.3 サンプルコード

宣言レコードの出力例を参照。

8.4.4 対応バージョン

1.0.0


Next: , Previous: DCL(F), Up: CodeStructures

8.5 DEF(V)

8.5.1 コード情報名

変数定義レコード

8.5.2 内容

関数の仮引数を含む全ての変数定義について、定義位置、変数名、変数型などを出力し ます。

8.5.3 サンプルコード

定義レコードの出力例を参照。

8.5.4 対応バージョン

1.0.0


Next: , Previous: DEF(V), Up: CodeStructures

8.6 DEF(F)

8.6.1 コード情報名

関数定義レコード

8.6.2 内容

全ての関数定義について、定義位置、関数名、関数シグニチャなどを出力します。

8.6.3 サンプルコード

定義レコードの出力例を参照。

8.6.4 対応バージョン

1.0.0


Next: , Previous: DEF(F), Up: CodeStructures

8.7 DEF(M)

8.7.1 コード情報名

マクロ定義レコード

8.7.2 内容

すべてのマクロ定義について、定義位置、マクロ名、マクロの種別を出力します。

8.7.3 サンプルコード

定義レコードの出力例を参照。

8.7.4 対応バージョン

1.0.0


Next: , Previous: DEF(M), Up: CodeStructures

8.8 DEF(L)

8.8.1 コード情報名

ラベル定義レコード

8.8.2 内容

関数内の全てのラベルについて、定義位置、ラベル名を出力します。

8.8.3 サンプルコード

定義レコードの出力例を参照。

8.8.4 対応バージョン

1.0.0


Next: , Previous: DEF(L), Up: CodeStructures

8.9 INI

8.9.1 コード情報名

初期化レコード

8.9.2 内容

変数定義時の初期化について、初期化位置、初期化する変数名、初期値を出力します。

8.9.3 サンプルコード

初期化レコードの出力例を参照。

8.9.4 対応バージョン

1.0.0


Next: , Previous: INI, Up: CodeStructures

8.10 ASN

8.10.1 コード情報名

代入式レコード

8.10.2 内容

変数への代入式について、代入式の位置、代入する変数名、代入値を出力します。

8.10.3 サンプルコード

代入式レコードの出力例を参照。

8.10.4 対応バージョン

1.0.0


Next: , Previous: ASN, Up: CodeStructures

8.11 DEP(I)

8.11.1 コード情報名

インクルードレコード

8.11.2 内容

#include ディレクティブで他のファイルをインクルードした場合に、 #include ディレクティブの位置、インクルードするファイルのパス名を出力し ます。

8.11.3 サンプルコード

依存レコードの出力例を参照。

8.11.4 対応バージョン

1.0.0


Next: , Previous: DEP(I), Up: CodeStructures

8.12 DEP(C)

8.12.1 コード情報名

呼び出しレコード

8.12.2 内容

関数から他の関数を呼び出した場合、呼び出し位置、呼び出し元の関数名、呼び出し先 の関数名などを出力します。

8.12.3 サンプルコード

依存レコードの出力例を参照。

8.12.4 対応バージョン

1.0.0


Next: , Previous: DEP(C), Up: CodeStructures

8.13 DEP(X)

8.13.1 コード情報名

外部参照レコード

8.13.2 内容

関数からグローバル変数をアクセス、関数から他の関数のアドレスを参照した場合に、 アクセス位置、アクセス元の関数名、アクセス先のオブジェクト名などを出力します。

8.13.3 サンプルコード

依存レコードの出力例を参照。

8.13.4 対応バージョン

1.0.0


Next: , Previous: DEP(X), Up: CodeStructures

8.14 LIT

8.14.1 コード情報名

リテラルレコード

8.14.2 内容

定数、文字列リテラルを使用した場合、使用した位置、定数や文字列リテラルの内容な どを出力します。

8.14.3 サンプルコード

リテラルレコードの出力例を参照。

8.14.4 対応バージョン

1.0.0


Previous: LIT, Up: CodeStructures

8.15 PRE

8.15.1 コード情報名

プリプロセスレコード

8.15.2 内容

プリプロセッサディレクティブについて、使用位置、ディレクティブ名、ディレクティ ブに指定した引数を出力します。

8.15.3 サンプルコード

プリプロセスレコードの出力例を参照。

8.15.4 対応バージョン

1.0.0


Next: , Previous: CodeStructures, Up: Top

Appendix A 付録

A.1 スクリーンショット

A.1.1 Adqua との連携

AdLint の静的解析結果を Adqua で処理することにより、ソースコード品質を定量的に 評価することができます。

Adqua は株式会社オージス総研から入手可能です 。詳しくは Adqua 製 品情報をご覧ください。

adlint_on_adqua.png

A.1.2 テキストエディタ Vim との連携

AdLint は、標準的なコンパイラと同様の形式で警告メッセージを出力するので、テキス トエディタと容易に連携して開発中にコードチェックすることができます。

adlint_on_vim_ja.png

A.1.3 統合開発環境 Eclipse との連携

AdLint は、標準的なコンパイラと同様の形式で警告メッセージを出力するので、統合開 発環境と容易に連携して開発中にコードチェックすることができます。

adlint_on_eclipse_ja.png

A.2 特性ファイルのサンプル

#     ___    ____  __    ___   _________
#    /   |  / _  |/ /   / / | / /__  __/           Source Code Static Analyzer
#   / /| | / / / / /   / /  |/ /  / /                   AdLint - Advanced Lint
#  / __  |/ /_/ / /___/ / /|  /  / /
# /_/  |_|_____/_____/_/_/ |_/  /_/   Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
#
# This file is part of AdLint.
#
# AdLint is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# AdLint is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# AdLint.  If not, see <http://www.gnu.org/licenses/>.
#

# Schema version of the traits file.
# DO NOT EDIT MANUALLY!
version: "3.0.0"

# List of names of source code examination packages.
#
# "c_builtin" is a builtin source code examination package for C language.
# You can install optional examination packages and append (or replace) this
# list to specify which examination packages are to be run.
exam_packages:
  - "c_builtin"

#
# Project specific traits section
#
project_traits:

  # Project name.
  project_name: "screen-4.0.3"

  # Project root directory.
  project_root: ".."

  # Analysys target selection.
  # Ex.
  #   target_files:
  #     inclusion_paths:
  #       - "../foo"
  #       - "../bar"
  #     exclusion_paths:
  #       - "../bar/baz"
  target_files:
    inclusion_paths:
      - ".."
    exclusion_paths:

  # Pathname of the project specific initial header file.
  # This header file is automatically included above the first line of the
  # target source file.
  initial_header: "adlint_pinit.h"

  # Project specific additional include paths.
  # Ex.
  #   file_search_paths:
  #     - "include/foo"
  #     - "../include/bar"
  #     - "/opt/baz/include"
  file_search_paths:
    - "../screen-4.0.3"

  #
  # Project specific coding style section
  #
  coding_style:

    # Indent style which is a convention governing the identation of blocks.
    # Select from "K&R", "Allman" and "GNU".
    #
    # The value "K&R" means...
    #   int foo(int i)
    #   {
    #       if (i == 0) {
    #           return 0;
    #       }
    #       return i;
    #   }
    #
    # The value "Allman" means...
    #   int foo(int i)
    #   {
    #       if (i == 0)
    #       {
    #           return 0;
    #       }
    #       return i;
    #   }
    #
    # The value "GNU" means...
    #   int
    #   foo(int i)
    #   {
    #     if (i == 0)
    #       {
    #         return 0;
    #       }
    #     return i;
    #   }
    indent_style: "GNU"

    # Appearance width of a TAB character.
    tab_width: 8

    # Appearance width of 1-level of the indentation.
    indent_width: 2

  # Character encoding of source files.
  file_encoding:

#
# Compiler specific traits section
#
compiler_traits:

  # Pathname of the compiler specific initial header file.
  # This header file is automatically included above the first line of the
  # project specific initial header file.
  initial_header: "adlint_cinit.h"

  # Compiler specific include paths.
  # Ex.
  #   file_search_paths:
  #     - "/usr/include"
  #     - "/usr/local/include"
  file_search_paths:
    - "/usr/local/include"
    - "/usr/include"
    - "/usr/lib/gcc/i686-redhat-linux/4.5.1/include"

  #
  # Compiler specific standard type section
  #
  standard_types:

    # Bit size of the `char' type family.
    char_size: 8
    # Bit size of the alignment of the `char' type family.
    char_alignment: 8

    # Bit size of the `short' type family.
    short_size: 16
    # Bit size of the alignment of the `short' type family.
    short_alignment: 16

    # Bit size of the `int' type family.
    int_size: 32
    # Bit size of the alignment of the `int' type family.
    int_alignment: 32

    # Bit size of the `long int' type family.
    long_size: 32
    # Bit size of the alignment of the `long int' type family.
    long_alignment: 32

    # Bit size of the `long long int' type family.
    long_long_size: 64
    # Bit size of the alignment of the `long long int' type family.
    long_long_alignment: 64

    # Bit size of the `float' type.
    float_size: 32
    # Bit size of the alignment of the `float' type.
    float_alignment: 32

    # Bit size of the `double' type.
    double_size: 64
    # Bit size of the alignment of the `double' type.
    double_alignment: 64

    # Bit size of the `long double' type.
    long_double_size: 96
    # Bit size of the alignment of the `long double' type.
    long_double_alignment: 96

    # Bit size of the pointer to functions.
    code_ptr_size: 32
    # Bit size of the alignment of the pointer to functions.
    code_ptr_alignment: 32

    # Bit size of the pointer to data.
    data_ptr_size: 32
    # Bit size of the alignment of the pointer to data.
    data_ptr_alignment: 32

    # Treat the `char' type as same as the `unsigned char' type?
    char_as_unsigned_char: true

  # Treat the `>>' operator as a logical shift, not an arithmetic shift?
  arithmetic:
    logical_right_shift: true

  # Max length of all symbols can be identified by the compiler.
  identifier_max: 128

  # Token substitution setting to warn the use of compiler specific extensions.
  #
  # If your compiler supports `__attribute__(...)' extension and you want to
  # know the use of this extension, specify as below.
  #   extension_substitutions:
  #     "__attribute__(__adlint__any)": ""
  # The token sequence consists of `__attribute__', `(', any kind of tokens,
  # `)' will be replaced with nothing (erased) after the preprocessing phase.
  # And this substitution will be warned by the message W0061.
  extension_substitutions:
    "__extension__": ""
    "__attribute__(__adlint__any)": ""
    "__inline__": "inline"
    "__asm__ __adlint__any(__adlint__any)": ""

  # Token substitution setting to silently ignore the use of compiler specific
  # extensions.
  #
  # If your compiler supports `__asm__ volatile (...)' extension and you do not
  # mind the use of this extension, specify as below.
  #   arbitrary_substitutions:
  #     "__asm__ __adlint__any(__adlint__any)": ""
  # The token sequence consists of `__asm__', any kind of tokens, `(', any kind
  # of tokens, `)' will be replaced with nothing (erased) silently after the
  # preprocessing phase.
  arbitrary_substitutions:
    "typeof": "__typeof__"
    "__typeof": "__typeof__"
    "alignof": "__alignof__"
    "__alignof": "__alignof__"
    "__signed__": "signed"

#
# Linker specific traits section
#
linker_traits:

  # Max length of external symbols can be identified by the linker.
  identifier_max: 128

  # Are external symbols identified without case by the linker?
  identifier_ignore_case: false

#
# Message traits section
#
message_traits:

  # Language of the message text.
  # Currently, "en_US" and "ja_JP" are supported.
  # Please help to translate the message catalog into your language.
  language: "ja_JP"

  # Enable inline annotation based message suppression?
  individual_suppression: true

  # Project-wide code check exclusion settings.
  # Ex.
  #   exclusion:
  #     categories:
  #       - "REL"
  #       - "PRT"
  #     severities: "[ABC][5-9][0-9]"
  #     messages:
  #       W0001: "c_builtin"
  #       W0002: "c_ansi"
  exclusion:

  # Project-wide code check inclusion settings.
  # Ex.
  #   inclusion:
  #     messages:
  #       W0001: "c_builtin"
  #       W0002: "c_ansi"
  inclusion:

  # Message text replacement.
  # Ex.
  #   change_list:
  #     W9999:
  #       package: "c_builtin"
  #       classes:
  #         - "REL:A10"
  #         - "PRT:B20"
  #       format: "Your custom message for the warning of W9999."
  #     X9999:
  #       package: "core"
  #       classes:
  #         - "ERR:X99"
  #       format: "Your custom message for the warning of X9999."
  #     E9999:
  #       package: "core"
  #       classes:
  #         - "ERR:X99"
  #       format: "Your custom message for the warning of E9999."
  change_list:

A.3 解析手順 GNUmakefile のサンプル

#     ___    ____  __    ___   _________
#    /   |  / _  |/ /   / / | / /__  __/           Source Code Static Analyzer
#   / /| | / / / / /   / /  |/ /  / /                   AdLint - Advanced Lint
#  / __  |/ /_/ / /___/ / /|  /  / /
# /_/  |_|_____/_____/_/_/ |_/  /_/   Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
#
# This file is part of AdLint.
#
# AdLint is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# AdLint is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# AdLint.  If not, see <http://www.gnu.org/licenses/>.
#
# How...
#   - to validate configuration files
#     % make check
#   - to analyze whole project with compiler like messages
#     % make all
#   - to do only single module analyses with compiler like messages
#     % make sma-only
#   - to analyze whole project with progress report
#     % make verbose-all
#   - to do only single module analyses with progress report
#     % make verbose-sma-only
#   - to do only cross module analysis with progress report
#     % make verbose-cma-only
#   - to analyze whole project *FAST* on 4-core processor machine
#     % make -j 4 all
#   - to analyze whole project *FAST* and silently with elapsed time
#     % time make -j 4 all 2>/dev/null
#   - to delete all result files
#     % make clean
#

PROJECT = screen-4.0.3

SOURCES = \
  screen-4.0.3/screen.c \
  screen-4.0.3/ansi.c \
  screen-4.0.3/fileio.c \
  screen-4.0.3/mark.c \
  screen-4.0.3/misc.c \
  screen-4.0.3/resize.c \
  screen-4.0.3/socket.c \
  screen-4.0.3/search.c \
  screen-4.0.3/tty.c \
  screen-4.0.3/term.c \
  screen-4.0.3/window.c \
  screen-4.0.3/utmp.c \
  screen-4.0.3/loadav.c \
  screen-4.0.3/putenv.c \
  screen-4.0.3/help.c \
  screen-4.0.3/termcap.c \
  screen-4.0.3/input.c \
  screen-4.0.3/attacher.c \
  screen-4.0.3/pty.c \
  screen-4.0.3/process.c \
  screen-4.0.3/display.c \
  screen-4.0.3/comm.c \
  screen-4.0.3/kmapdef.c \
  screen-4.0.3/acls.c \
  screen-4.0.3/braille.c \
  screen-4.0.3/braille_tsi.c \
  screen-4.0.3/logfile.c \
  screen-4.0.3/layer.c \
  screen-4.0.3/sched.c \
  screen-4.0.3/teln.c \
  screen-4.0.3/nethack.c \
  screen-4.0.3/encoding.c

VPATH = ..
VPATH_COMPONENTS = 1

RUBY = ruby

ADLINT = adlint
ADLINT_FLAGS = -t adlint_traits.yml -o . -p $(VPATH_COMPONENTS)

ADLINT_SMA = adlint_sma
ADLINT_SMA_FLAGS = -t adlint_traits.yml -o . -p $(VPATH_COMPONENTS)

ADLINT_CMA = adlint_cma
ADLINT_CMA_FLAGS = -t adlint_traits.yml -o .

ADLINT_CHK = adlint_chk
ADLINT_CHK_FLAGS = -t adlint_traits.yml -o . -p $(VPATH_COMPONENTS)

RM = $(RUBY) -r fileutils -e 'FileUtils.rm_f(ARGV)'

VPATHED_SOURCES = $(addprefix $(VPATH)/, $(SOURCES))

SMA_MSG_FILES = $(addsuffix .msg.csv, $(SOURCES))
SMA_MET_FILES = $(addsuffix .met.csv, $(SOURCES))
SMA_I_FILES = $(addsuffix .i, $(basename $(SOURCES)))
SMA_LOG_FILES = $(addsuffix .log, $(SOURCES))

CMA_MSG_FILE = $(PROJECT).msg.csv
CMA_MET_FILE = $(PROJECT).met.csv
CMA_LOG_FILE = $(PROJECT).log

.SUFFIXES:

%.c.msg.csv %.c.met.csv : %.c
	$(ADLINT_SMA) $(ADLINT_SMA_FLAGS) $<

$(CMA_MET_FILE) : $(SMA_MET_FILES)
	$(ADLINT_CMA) $(ADLINT_CMA_FLAGS) $^

.PHONY: adlint_sma-all
adlint_sma-all : $(SMA_MET_FILES)

.PHONY: adlint_cma-all
adlint_cma-all : $(CMA_MET_FILE)

.PHONY: adlint_chk-all
adlint_chk-all :
	$(ADLINT_CHK) $(ADLINT_CHK_FLAGS) -v $(VPATHED_SOURCES)

.PHONY: adlint_verbose-all
adlint_verbose-all :
	$(ADLINT) $(ADLINT_FLAGS) -v $(VPATHED_SOURCES)

.PHONY: adlint_verbose-sma-only
adlint_verbose-sma-only :
	$(ADLINT_SMA) $(ADLINT_SMA_FLAGS) -v $(VPATHED_SOURCES)

.PHONY: adlint_verbose-cma-only
adlint_verbose-cma-only : $(SMA_MET_FILES)
	$(ADLINT_CMA) $(ADLINT_CMA_FLAGS) -v $^

.PHONY: adlint_clean
adlint_clean :
	@$(RM) $(SMA_MSG_FILES) $(SMA_MET_FILES) $(SMA_I_FILES) \
	       $(SMA_LOG_FILES) $(CMA_MSG_FILE) $(CMA_MET_FILE) $(CMA_LOG_FILE)

.PHONY: all
all : adlint_cma-all

.PHONY: sma-only
sma-only : adlint_sma-all

.PHONY: verbose-all
verbose-all : adlint_verbose-all

.PHONY: verbose-sma-only
verbose-sma-only : adlint_verbose-sma-only

.PHONY: verbose-cma-only
verbose-cma-only : adlint_verbose-cma-only

.PHONY: check
check : adlint_chk-all

.PHONY: clean
clean : adlint_clean


Previous: Appendix, Up: Top

索引