Loose-Info.com
Last Update 2021/10/24
TOP - 各種テスト - gcc - 警告関連のオプション - -Wfloat-conversion

-Wfloat-conversion
実数値の精度を下げる暗黙の変換に関する警告

テスト概要

オプション無し、-Wfloat-conversion、-Wconversionの各オプションを使用した際の警告出力例

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル


sample.c
#include <stdio.h> int main(void) { double d1 = 1.234567E-45; double d2 = 1.234567E+00; double x1, x2; float f1, f2; int n1, n2; x1 = d1; x2 = d2; /* 倍精度浮動小数点型を単精度浮動小数点型へ代入 */ f1 = d1; f2 = d2; /* 倍精度浮動小数点型を整数型へ代入 */ n1 = d1; n2 = d2; printf("d1 = %E\nx1 = %E\nf1 = %E\nn1 = %E\n\n", d1, x1, f1, (double)n1); printf("d2 = %E\nx2 = %E\nf2 = %E\nn2 = %E\n", d2, x2, f2, (double)n2); return 0; }

動作テスト

オプション無しでコンパイルを実行
$ gcc sample.c 警告無し $ ./a.out d1 = 1.234567E-45 x1 = 1.234567E-45 f1 = 1.401298E-45 n1 = 0.000000E+00 d2 = 1.234567E+00 x2 = 1.234567E+00 f2 = 1.234567E+00 n2 = 1.000000E+00 $

-Wfloat-conversionオプションを指定してコンパイルを実行
$ gcc -Wfloat-conversion sample.c sample.c: In function ‘main’: sample.c:15:7: warning: conversion from ‘double’ to ‘float’ may change value [-Wfloat-conversion] f1 = d1; ^~ sample.c:16:7: warning: conversion from ‘double’ to ‘float’ may change value [-Wfloat-conversion] f2 = d2; ^~ sample.c:19:7: warning: conversion from ‘double’ to ‘int’ may change value [-Wfloat-conversion] n1 = d1; ^~ sample.c:20:7: warning: conversion from ‘double’ to ‘int’ may change value [-Wfloat-conversion] n2 = d2; ^~ $ doubleからfloatおよびintへの変換で値が変わる可能性がある事への警告

-Wconversionオプションを指定してコンパイルを実行
$ gcc -Wconversion sample.c sample.c: In function ‘main’: sample.c:15:7: warning: conversion from ‘double’ to ‘float’ may change value [-Wfloat-conversion] f1 = d1; ^~ sample.c:16:7: warning: conversion from ‘double’ to ‘float’ may change value [-Wfloat-conversion] f2 = d2; ^~ sample.c:19:7: warning: conversion from ‘double’ to ‘int’ may change value [-Wfloat-conversion] n1 = d1; ^~ sample.c:20:7: warning: conversion from ‘double’ to ‘int’ may change value [-Wfloat-conversion] n2 = d2; ^~ $ -Wfloat-conversionオプションは-Wconversionでも有効となる