初歩的な質問ですみません。愚問です。
教えていただけたら幸いです。
C言語のプログラムに
[#include <stdio.h>]
という行があります。
[stdio.h]
標準入出力ヘッダファイルを読み込むということは分かりました。
そこで疑問に思ったことが3点あります。
1.それってつまり、
ヘッダファイルという、プログラムのコードが書いてあるプログラムの内容を
[#include <stdio.h>]
と書いてある部分に書いたのと同じということでしょうか?
2.もし1.の疑問が正しければ、
[#include <stdio.h>]
と書かなくても、
[stdio.h]
の内容を
[stdio.h]
に書けば良いということでしょうか?
3.愚問ですが、
自家製じゃないと料理はしないぜ‼野菜も油もフライパンも全部自家製だぜ‼みたいなノリで、
[#include]
なんて誰が使ってやるもんか‼
[stdio.h]の内容を
自作するプログラムの中に全部書き込んで、
[#include]なんて使わずに動かしてやるぜ‼
ということも可能でしょうか?(プログラムの行数が馬鹿みたいに長くなりそうですが…。)
また、気になったので、
[stdio.h]
の中身のプログラムを見たのですが、
[stdio.h]
の中で
別のヘッダファイルを読みだしています。
そういった場合も全部移さないとだめですよね…?
長文失礼しました。読んでいただいてありがとうございます。
ご回答いただけましたら幸いです。
【愚問】C言語のヘッダファイルについて
Re: 【愚問】C言語のヘッダファイルについて
初歩的とか愚問とかは書く必要はありません。helloworld さんが書きました:初歩的な質問ですみません。愚問です。
回答者に対して印象を悪くするだけです。
おおむねその通りになります。helloworld さんが書きました:1.それってつまり、
ヘッダファイルという、プログラムのコードが書いてあるプログラムの内容を
[#include <stdio.h>]
と書いてある部分に書いたのと同じということでしょうか?
__FILE__と__LINE__に限って,インクルードしているファイル名やファイルの行番号になるため,動作が異なります。
また,非標準のプラグマであるonceのように,一つの翻訳単位中で2度目以降に読み込まれた場合に動作が変わるものがありますが,
それらに関しても異なる動きをします。
一応はその通りになります。helloworld さんが書きました:2.もし1.の疑問が正しければ、
[#include <stdio.h>]
と書かなくても、
[stdio.h]
の内容を
[stdio.h]
に書けば良いということでしょうか?
全部書かないまでも,標準規格上, という宣言をしておくことで,<stdio.h>がなくてもprintf関数を使えるようになります。
規格書中で該当する箇所は次になります。
ただし,ソースコード中に展開する場合は規格書7.1.3 Reserved identifiersの縛りを受けます。ISO/IEC 9899:2011 さんが書きました:7.1.4 Use of library functions
2 Provided that a library function can be declared without reference to any type defined in a header, it is also permissible to declare the function and use it without including its associated header.
__から始まる識別子や_と大文字の識別子など,実装用が使うことが想定されている識別子が<stdio.h>等には使われているでしょうから,そのまま展開すると未定義の振る舞いとなります。
# 実際には<stdio.h>をインクルードした場合と同じくコンパイル可能でしょうけれど。
なぜでしょうか。helloworld さんが書きました:[stdio.h]
の中身のプログラムを見たのですが、
[stdio.h]
の中で
別のヘッダファイルを読みだしています。
そういった場合も全部移さないとだめですよね…?
Re: 【愚問】C言語のヘッダファイルについて
ちょっと意味がわかりません。後の方のstdio.hというのはどこに置くことを想定されていますか?helloworld さんが書きました: [stdio.h]
の内容を
[stdio.h]
に書けば良いということでしょうか?
原理的には可能かもしれません。が、helloworld さんが書きました: [stdio.h]の内容を
自作するプログラムの中に全部書き込んで、
[#include]なんて使わずに動かしてやるぜ‼
ということも可能でしょうか?(プログラムの行数が馬鹿みたいに長くなりそうですが…。)
悪いことはいいませんから絶対にやめましょう。
先人の知恵はそのまま拝借する方がよいです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 【愚問】C言語のヘッダファイルについて
愚問ではありませんよ、学び始めた人が誰も疑問に思う普通のことだと思います。
おそらくincludeしている対象のファイルの中身をコーディングしているファイルにそのままコピペすればinclude文が無くても動くのかということですよね?
それであればYuOさんの書いていらっしゃる通りです。
C言語というものはそれだけ(何もincludeしない状態)では非常に少ない機能しか持ちません。
逆に言えば何もincludeしなくてもコンパイルは通りますし実行も出来ますよ。
それを視覚化できず見えないので大抵視覚化できるライブラリであるstdio.hがincludeしてあるのです。
例えば以下のコードは何もinclude文がありませんが、コンパイル、実行できます。 しかしprintf等目に見える状態に出力する処理が何もできないので実行結果は目に見えません。
〇〇.hをincludeするごとにC言語の能力がパワーアップすると覚えておけば良いと思います。
文字列処理をしたいのであれば#include <string.h>することでstring.hに書いてある関数が使えるようになりますし
http://www.c-tipsref.com/reference/string.html
時間に関する処理をしたいのであれば#include <time.h>することでtime.hに書いてある関数が使えるようになりますし
http://www.c-tipsref.com/reference/time.html
includeしたらその分だけ出来ることが増えるのです。
標準でどんなヘッダファイルがあるのか、どんなパワーアップが出来るのかはこの辺のサイトを参考にしてください。
http://homepage3.nifty.com/mmgames/c_guide/r_lib.html
当サイトでも紹介していますが、プレステのようなゲームが作れるようにC言語をパワーアップする方法についてはこちらをご覧ください
http://dixq.net/g/m_02.html
おそらくincludeしている対象のファイルの中身をコーディングしているファイルにそのままコピペすればinclude文が無くても動くのかということですよね?
それであればYuOさんの書いていらっしゃる通りです。
C言語というものはそれだけ(何もincludeしない状態)では非常に少ない機能しか持ちません。
逆に言えば何もincludeしなくてもコンパイルは通りますし実行も出来ますよ。
それを視覚化できず見えないので大抵視覚化できるライブラリであるstdio.hがincludeしてあるのです。
例えば以下のコードは何もinclude文がありませんが、コンパイル、実行できます。 しかしprintf等目に見える状態に出力する処理が何もできないので実行結果は目に見えません。
〇〇.hをincludeするごとにC言語の能力がパワーアップすると覚えておけば良いと思います。
文字列処理をしたいのであれば#include <string.h>することでstring.hに書いてある関数が使えるようになりますし
http://www.c-tipsref.com/reference/string.html
時間に関する処理をしたいのであれば#include <time.h>することでtime.hに書いてある関数が使えるようになりますし
http://www.c-tipsref.com/reference/time.html
includeしたらその分だけ出来ることが増えるのです。
標準でどんなヘッダファイルがあるのか、どんなパワーアップが出来るのかはこの辺のサイトを参考にしてください。
http://homepage3.nifty.com/mmgames/c_guide/r_lib.html
当サイトでも紹介していますが、プレステのようなゲームが作れるようにC言語をパワーアップする方法についてはこちらをご覧ください
http://dixq.net/g/m_02.html
Re: 【愚問】C言語のヘッダファイルについて
>自作するプログラムの中に全部書き込んで、
この労力を削減するのがincludeの目的だと思うので,
労力を割くことを厭わないならば全部書いて良いです.
この労力を削減するのがincludeの目的だと思うので,
労力を割くことを厭わないならば全部書いて良いです.
オフトピック
オフトピック
以下,正確な物言いではありませんが…
大抵の場合,
・必要としている物は2種類(宣言と実装)
・ヘッダファイルというのは大抵はそのうちの一方(宣言)が記載されているもの
という感じなので,ヘッダファイルの内容を全部コピペしてきただけでは,
>全部自家製
と名乗るには不足でしょう.
大抵の場合,
・必要としている物は2種類(宣言と実装)
・ヘッダファイルというのは大抵はそのうちの一方(宣言)が記載されているもの
という感じなので,ヘッダファイルの内容を全部コピペしてきただけでは,
>全部自家製
と名乗るには不足でしょう.