回答受付が終了しました

ID非公開

2021/9/3 5:54

66回答

♯includeをC言語で書く理由は何でですか。そんな他のプログラミング言語と違うのでしょうか。

C言語関連371閲覧

回答(6件)

0

>♯includeをC言語で書く理由 というよりヘッダファイルの存在理由ですが、、、、 あるプログラム単位が、他のプログラム単位に提供する利便を輸出側/輸入側で情報として共有/確認する為です あるプログラム単位とは ・標準ライブラリ ・他所から購入したライブラリ(グラフィックスライブラリとか) ・自社で構築してきたライブラリ、プログラムパッケージ ・いま貴方や,同僚が書いている Cファイル これらは、ソースファイル提供の場合と、バイナリファイル(リロケータブルオブジェクトファイル/ライブラリファイル)提供の場合が有ります 利便を輸出する側は、宣言をヘッダファイルに書き定義を Cソースファイルに書き、インクルードで読み込んだヘッダファイルにある「同じテキスト」を一緒にコンパイルする事で「宣言と定義が一致する」事を「保証します」 利便を輸入する側は、宣言と定義が一致している事が保証されているので、 安心して宣言を利用することが出来る stdio.h みたいなヘッダしか見たことないと、公共放送局のテレビ番組欄みたいにあるもの全てヘッダファイルに書きたくなるけど A → B に提供する利便と A → C に提供する利便は異なるはず だとすれば fromA_toB.h と fromA_toC.h は別物に別けて、A,B,C 間の干渉を最小にすべきである

1

依存関係を少なくするためだと考えます。 《C言語とC++》 #include するとそこで依存関係が生じます。 逆に言えば #include しなければ依存関係は生じない。必要なものだけを #include するようにして、そのソースファイルにとって関係無いものは #include しないようにする。そうして依存関係の規模を小さく抑えることでコンパイルに要する時間を短くすることができ、コンパイル時に必要となるメモリ量を少なく済ませることができます。 CPUは速くなり搭載メモリ量は莫大なものとなった今、その点はもうどうでも良くなったかもしれません。 でも…… 現在の先進的なエディタにおいてはソースコードの全内容を完全に読み切っていて、その上でコード補完を行ってくれたりします。ソースコードを書いている最中にコンパイル時とだいたい同じ処理が何回も何回も発生している形になり、その負荷は非常に大きなものとなります。 《他の言語》 依存関係を細かく制御できません。そこにあるソースファイル群の全てがどこからでも見えてしまう。private、public の話ではありません。そもそもそこが private となっているということは、そのソースファイルを読み切った上で判定されるものです。つまり、#include の記述が無いということは全てのソースコードが読み取られるというお話になります。 ですから、規模が大きくなると上述のコード補完の準備に結構時間が掛かるようになります。 ただし、システムの性能はどんどん上がっていきますので、このことはある程度楽観的に見ても良いのかもしれません。(C言語、C++に比べれば不利である状況は変わりませんが) 【そんな他のプログラミング言語と違うのでしょうか】 ええ、かなり。

1人がナイス!しています

0

書く理由はそれが必要に成ったからです。それ以前のCOBOLやFORTRAMは殆どの機能を言語の命令文として提供していましたが、C言語では命令文では無く、標準関数として提供するように改めました、標準関数はどのプログラムで使うので、その情報を別ファイルで作っておいて、#includeでプログラムに簡単に与える事が出来るようにした訳です。このように、既に作られている便利なプログラムを使い、プログラミングを簡単に作れるようにしましたが、初心者にとっては何を#includeする必要が有るのかは、結構しんどい事ですので、初心者泣かせの文法になってしまっています。

1

・標準関数の宣言をいちいち書く手間を省くため。 ・複数のソースファイルで共通する記述を一纏めにするため。 他の言語とはちょっと毛色が異なりますね。

1人がナイス!しています

#include するとそこで依存関係が生じます。 …と答えている人がいますが、それ半分以上は嘘です。 #includeを使おうが使うまいが、依存関係は「発生するときは発生する」ものです。 CやC++において#includeは「別ファイルにしておいたソースの一部をその位置に取り込む」という機能しかありません。#includeは取り込んだソースになにが書かれているか?には一切関知しません。 依存関係を処理するのはリンカです。リンカはライブラリ中の必要なオブジェクトしかリンクしません。故に、ライブラリが適切に構築されていれば、不必要なモノがリンクされるということはありません。

0

C言語がほかの言語と違って得意なのは 1.メモリの内容を直接操作できる。 ハードウェアを操作するデバイスドライバは、C言語が適してます 2.過去のライブラリ 初期のソフトウェアの多くがC言語でかかれており、それを利用したいときにC言語をつかいます。