C言語,float.h が配置されている場所を確認する

スポンサーリンク

鍛錬 297

C言語,float.h が配置されている場所を確認する

C言語でプログラムを記述する際に float.h をインクルードする場合がありますが、float.h がどこのディレクトリに配置されているのかについてです。

スポンサーリンク

PC環境

私のPC環境は、以下に示す通りです。

関連記事:Linux,Ubuntuのバージョンとアーキテクチャを確認する

***@ubuntu:~/***/test/tmp$ 
***@ubuntu:~/***/test/tmp$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial
***@ubuntu:~/***/test/tmp$ arch
x86_64
スポンサーリンク

gcc環境

私のgcc環境は、以下に示す通りです。

関連記事:Linux,gccのバージョンと、ターゲットプロセッサを確認する

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -dumpversion
5.4.0
***@ubuntu:~/***/test/c$ gcc -dumpmachine
x86_64-linux-gnu
スポンサーリンク

float.h が配置されている場所を確認

1. float.h を検索

以下は、データベースを利用して float.h を検索しています。

関連記事:Linux,データベースを利用して、ファイルの高速検索を行う

root@ubuntu:/# 
root@ubuntu:/# locate float.h
/usr/include/c++/5/tr1/float.h
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
/usr/lib/gcc/x86_64-linux-gnu/5/include/float.h

 
上記に示した通り、/usr/lib/gcc/x86_64-linux-gnu/5/include に float.h が配置されていることが分かりました。

しかし、実際にファイルの内容を確認すると、#define で定義されているはずの数値等が記述されていませんでした。

以下は、float.h から一部を抜粋しています。

/* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */
#undef FLT_MIN_EXP
#undef DBL_MIN_EXP
#undef LDBL_MIN_EXP
#define FLT_MIN_EXP     __FLT_MIN_EXP__
#define DBL_MIN_EXP     __DBL_MIN_EXP__
#define LDBL_MIN_EXP    __LDBL_MIN_EXP__

 
上記に示した通り、__FLT_MIN_EXP__ 等と記述されており、具体的な数値を確認することができません。

これは、__FLT_MIN_EXP__ が gcc の定義済みマクロとして定義されているためです。

2. gcc の定義済みマクロを確認

以下は、gcc の定義済みマクロから、float.h に記述されていた __FLT_MIN_EXP__ を検索しています。

関連記事:C言語,gcc の定義済みマクロを確認する

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ echo | gcc -dM -E - | grep __FLT_MIN_EXP__
#define __FLT_MIN_EXP__ (-125)

 
上記に示した通り、__FLT_MIN_EXP__ の値は (-125) と定義されていることが分かりました。

タイトルとURLをコピーしました