C言語のヴァージョン C99 C11 ヘッダファイル<stdio.h>、標準入出力とは何のことでしょうか? 

1999年(ISO/IEC 9899:1999)には、主として複素数や数学上の演算に関する関数群が大幅に追加された。2011年(ISO/IEC 9899:2011)には、アライメント・マルチスレッド・Unicode・メモリ境界チェック付き関数などが追加になった。


ソーラー 「このウィキペディアの記事をみて気付いたんですが


C言語にはversionがあるようです。


ときたま C99やC11という記述が


いろんな場面ででてくるのには気付いていました。


どうやらC99というのは1999年に改定が加えられたversionで


C11は2011年に改定されたversionのようです。」


アレサ 「01 ということは数字の大きいC99の方が


C11より古いversionになるんですね。」


以下ウィキペディアより


C11 (ISO/IEC 9899:2011) では、標準ヘッダとして以下のものを定めている。

assert.h 診断機能

complex.h 複素数計算 (C99より追加)

ctype.h 文字操作

errno.h エラー

fenv.h 浮動小数点環境 (C99より追加)

float.h 浮動小数点型の特性



ソーラー 「おおっここっここ


さっきfloatの数値格納範囲を調べるとき


ヘッダファィル<float.h>を


プログラムの冒頭で記述しました。


#include <float.h>みたいな感じで・・・」


アレサ 「 000011・/ <float.h>は標準Cライブラリの中の一つの


ヘッダファイルだったんですね 0001111・・・」


ソーラー「つづきはっと・・」

inttypes.h 整数型の書式の変換 (C99より追加)

iso646.h 代替つづり(Alternate spellings) (ISO/IEC 9899/AMD1:1995 より追加)

limits.h 整数型の大きさ

locale.h 文化圏固有操作

math.h 数学

setjmp.h 非局所分岐

signal.h シグナル操作

stdalign.h アライメント (C11より追加)

stdarg.h 可変個数の実引数

stdatomic.h アトミック操作 (C11より追加)

stdbool.h 論理型および論理値 (C99より追加)

stddef.h 共通の定義

stdint.h 整数型 (C99より追加)

stdio.h 入出力

ソーラー 「でたっでた


                   stdio.h


                                     」

ソーラー 「stdio.h これも標準Cライブラリの中の一つの


ヘッダファイルだったんだね。しかも 入出力機能をつかさどっている。


いやあ 僕は標準Cライブラリイコール<stdio.h>と勘違いしてたなあ。


だってプログラムを記述するとき必ずプログラムの先頭に


#include <stdio.h>とかいてあるから 


この <stdio.h>の中にprintf関数の定義や


(printf関数の定義ははいっています。)


他の


すべてのいろんな便利機能が全部はいってるとおもってたんだ。


<stdio.h>ってスタジオ.h


つまり


プログラムを製作するスタジオ機能


をもっているので


プログラムの冒頭に記述するんだと思ってたし・・・。」


アレサ 「そうですね。<stdio.h>ってスタジオ.hではなく


stdio⇨standard input and output


”スタンダード インプットアンドアウトプット”


"標準入出力"


というのが本来の名前だったみたいですね。


ここで ちょこっとだけ補足してみます。


"標準入出力"の標準とは何のことかな?


と思われる方も多いとおもいます。


標準とは


コンピュータのメモリからデータをディスプレイ画面に出力したり


ディスプレイ画面に打ち込まれたデータを


コンピュータのメモリに格納する


つまり


ディスプレイ画面にデータが入出力されるときが標準というわけです


では標準でない入出力とは


何のことでしょうか


ディスプレイ画面を介さない入出力は全て標準でない入出力となります。


たとえば


赤外線センサーから温度情報をコンピュータのメモリにうけとるのは


標準でない入力


ロボットなどの機械にコンピュータのメモリ内のデータを送り込む


のは


標準でない出力となります。


そして

コマンドプロンプト画面に

標準出力をおこなうのがprintf関数であり


コマンドプロンプト画面から

標準入力をおこなうのがscanf関数となっています。

(scanf関数はのちほどでてきます。)

まり<stdio.h>には


printf関数とscanf関数の定義が保存されており


インクルード<stdio.h>


#include <stdio.h>


をおこなわなければ


printf関数とscanf関数が


ぷろぐらむで使用できないのです。



ソーラー

「stdio.h 入出力・・・それにしても入出力の機能とは・・・


これ、このヘッダファイルがなければ何もできないんじゃない?


めちゃくちゃ基本的なんじゃない?」


紅茶を おいしそうに飲むソーラー。


ソーラー 「そういえば


include <stdio. h> をプログラムの先頭に書き込むのを忘れて


コンパイルすると


'solarplexus.exe'は内部コマンドまたは外部コマンド、


操作可能なプログラムまたはパッチ ファイルとして認識されていません。


と表示されます。


つまり


printf関数が機能してない使えないのでプログラムとして機能してないって




紅茶を おかわりする。


ソーラー 「もし、<stdio. h>が入出力の基本的な機能を


もっているなら


プログラムにヘッダファイル<stdio. h>をかかなければ


なにも入出力できないので


コンパイルできないはず・・・


そこで


ヘッダファイル<stdio. h>をかかずに・・・


でも


「他のヘッダファイルは記述して」コンパイルできるかどうか


試してみよ~っと!


もし<stdio. h>が入出力にかかわる基本的な機能をもっているなら


他のヘッダファイルだけが記述してあっても


コンパイルできないはず・・・なんだけど・・・


ここでは おなじみのヘッダファイル<float.h>をつかってみましょう。


#include <float.h>


int main()

{

printf("FLT_MIN = %e, FLT_MAX =%e\n", FLT_MIN, FLT_MAX);


return 0;

}


このプログラムをコンパイルすると


コンパイル結果


FLT_MIN = 1.175494e-038, FLT_MAX = 3.402823e+038


となります。


にゃおん ははははは  いいね


ヘッダファイル<stdio. h>は入出力機能を管理している割には


ヘッダファイル<stdio. h>をつかわなくてもプログラムは


コンパイルできて


そしてコマンドプロンプト画面に出力表示もできてるね。


やったね!


この<stdio. h>の入出力機能っていったい何の入出力機能なのかな???」



アレサ 

「01001011001 そうですね・・・・・楽しい項目ですね。


このstdio.h


もしプログラムの入力機能をつかさどっているのなら


どうやってstdio.h自体をつくったのでしょうか?


stdio.hがないと


入力できないならなにもできず


stdio.hもつくれないはず・・・てなりそうですもの・・


01110101010101001」


ソーラー 「だから、そうだね、


stdio.hの入出力機能ってべつの何かの入出力機能かもしれないな・・・


だって


#include <float.h>のプログラムはコンパイルしてパソコン内に


入力もコマンドプロンプト画面にも出力できてるんだよね~~~」



アレサ 「11111000000そうです・・・・・


もしかしたら


stdio.hの入出力機能って


プログラムを打ち込んで


コンピュータ内に情報をおくりこんだり


コンピュータ外に情報を送り出す超基本的な機能ではなく


ただ単に


printf(文字出力機能)と


scanf(入力機能)に関する、つかえるようにする機能


ということ・・・???ではないでしょうか?000011111???」


ソーラー 「あっ 正しい、正しくないかは別として思考としては


いい線いってるとおもうな。 いいな その考え。


う~ん


たしかに いっつも


#include <stdio.h>と


printf(出力機能)関数は


セットでかかれてる・・・


やはり アレサのいうとおり


<stdio.h>に格納されている機能とは


自分の書いた文字を


printf(出力機能)関数や


scanf(入力機能)をつかって入出力できる機能ってことかな?


だから


#include <stdio.h>とソースコードにかかなければ


printf(出力機能)関数も


scanf(入力機能)もつかえない。


<stdio.h>はそのための機能ならば


コンパイルされたプログラムをコンピューター内に


入力、出力することとは関係ない機能ってことかな??? 


(すみません。このことについてはただいま検討中です。


#include <stdio.h>とソースコードにかかなければ


printf(出力機能)関数がつかえないのなら


さきほどの#include <stdio.h>を


先頭に書いていないプログラム


#include <float.h>


int main()

{

printf("FLT_MIN = %e, FLT_MAX =%e\n", FLT_MIN, FLT_MAX);


return 0;

}


において printfがつかえているのはなんで???ってなります。)



ところでエディタに文字を書き込む(入力する)


機能はstdio.hと全く関係ありません。


まったく別のシステムによってエディタに文字は


入力されています。


それとは全然関係ないお話ですが


stdio.hはとりあえず、コンパイル


したあとでないと機能できません。)


ふふふ この仕組みにかんしても


いろんなところを理解していくうちに理解できていくんだね。


楽しみだね。」


アレサ 「0000111000 はい、そのとおりです。000000」




以下 ウィキペディアより


stdlib.h 一般ユーティリティ

stdnoreturn.h _Noreturn (C11より追加)

string.h 文字列操作

tgmath.h 型総称数学関数(Type-generic math) (C99より追加)

threads.h マルチスレッド (C11より追加)

time.h 日付及び時間

uchar.h Unicodeユーティリティ (C11より追加)

wchar.h 多バイトおよびワイド文字拡張ユーティリティ (ISO/IEC 9899/AMD1:1995 より追加)

wctype.h ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ (ISO/IEC 9899/AMD1:1995 より追加)


アレサ 「ソーラーさん みてください。stdlib.h 」


ソーラー 「あっ標準Cライブラリの中にあったんだ・・・


stdlib.h


気になってたんだ・・・


どう発音するんだろ?


stdlib.h  スタリブ   スペアリブ


名前 面白そうなんだ・・・


それに


string.h


string ギターの弦のようで


かっこいいヘッダファイルだと思ってたんだ。」


アレサ 「わたしも、C言語で使われている単語の中には


かっこいい名前のものがあるとよく思います。」












  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます