C プリプロセッサ 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(プリプロセッサ)
(プリプロセッサ)
3行: 3行:
 
<br />
 
<br />
 
== '''プリプロセッサ''' ==
 
== '''プリプロセッサ''' ==
プリプロセスと呼ばれる機械語翻訳処理(コンパイルやリンク)の前処理と解釈すべき動作があります。英語のpre(プリ)…は日本語で…の前にというような意味ですから、pre-processで処理の前というような直訳にもなりますから、なんとなく前準備のような処理であると認識しておけばよいと思います。このプリプロセスのプログラムで表現する部分をプリプロセッサと呼んでいます。プリプロセッサには各処理系(OS毎にも異なるc言語あるいはC++言語の翻訳処理システムVisuak C++やgcc)によって動作や記述が異なる部分が多く、標準化されているものよりもVisual C++におけるMicrosoft固有のプリプロセッサが非常に多く用意されています。ここでは、Microsoft固有のものも含めて、なるべく多くのプリプロセッサを体系的にまとめたものについて記載したいと思います。
+
プリプロセスと呼ばれる機械語翻訳処理(コンパイルやリンク)の前処理と解釈すべき動作があります。英語のpre(プリ)…は日本語で…の前にというような意味ですから、pre-processで処理の前というような直訳にもなりますから、なんとなく前準備のような処理であると認識しておけばよいと思います。このプリプロセスのプログラムで表現する部分をプリプロセッサと呼んでいます。プリプロセッサには各処理系(OS毎にも異なるc言語あるいはC++言語の翻訳処理システムVisuak C++やgcc)によって動作や記述が異なる部分が多く、標準化されているものよりもVisual C++におけるMicrosoft固有のプリプロセッサが圧倒的に多く用意されています。
  
  
それで具体的にはプリプロセッサって何?って話になりますが、よく出てくるプリプロセッサのひとつが#includeのようなディレクティブと呼んでいる記述による命令で、これはC言語の最初の学習でも学ぶことの多いヘッダファイルの指定のディレクティブです。ディレクティブというのはテレビのディレクターのような英単語と似た意味の英語で指示という意味をもっています。プリプロセッサは#includeに代表されるような#で始まる命令で構成されるディレクティブによって指定されます。
+
プリプロセスについて触れましたが、機械語翻訳処理の本処理についても触れておきます。コンパイルという単語だけが翻訳という意味でよく飛び交いますが、実際はコンパイルだけでは実行ファイルは生成されません。コンパイルして生成されるのは、実行可能ファイル(.objとか.oという拡張子がよく使われます)です。実行可能であって、実行ファイルではないです。機械語にはなっているんだけど、まだコンピュータに処理をしてもらえる実行プログラムアプリケーションにはなっていないということです。そして、リンク(リンカー)と呼んでいる処理を実施して実行可能ファイルから実行ファイルを生成します。ナニソレ、めんどくせ。一気にやっちゃえばいいじゃん。と思った人もいるかもしれませんが(既に知ってる人からすれば、この流れはよく見る寸劇に思えるでしょう。)、小規模なプログラムを作成している場合にはコンパイルとリンクを同時にひとまとめに実施してしまって問題ないのですが、大規模になってくるとコンパイル処理だけでも時間がかかるようになってきます。大規模なプログラムの一部分だけを変更した場合のコンパイル処理時間を減らすために、中間的な実行可能ファイル(.objや.o …)を生成する仕組みを使って、変更の無いところは既存の実行可能ファイルを使い、変更した部分は新たにコンパイル処理を実行し、新しい実行可能ファイルを生成します。そして、必要となるすべての実行可能ファイルをひとまとめにするリンクと呼んでいる処理を実行します。
 +
 
 +
 
 +
C言語でのコンパイル・リンク処理はコンパイルとだけ呼ぶような言い回しが流行していることが、先に書いた機械語翻訳の本処理の実体をわからなくしている一つの原因になったと思います。常に、コンパイル・リンク処理を意識するべく、コンパリンとかの略称で言いまわしておけば誤解がうまれる原因も少しはマシだったのかもしれないと思ったり、別にどうでもいいかと思ったりします。コンパリンとかはやんねぇし…。そのコンパリンの前処理みたいなのが、プリプロセス。
 +
 
 +
 
 +
'''コンパリン…'''
 +
 
 +
 
 +
実際はコンパリンはMakefileと呼んでいる作成しているプロジェクト(アプリケーションのためのソース一式)から実行ファイルを生成するためのまさにコンパリンをひとまとめにしたファイルによって一気に実行ファイルが生成できるように管理するのが通常です。このコンパリン処理をひとまとめにしたものMakefileを新しく編集したプログラムのファイルの部分だけ実行することをVisual Studioではビルドと呼ぶようになりましたし、Makefileに書かれている内容を全部やりなおす処理をリビルドと呼ぶようになりました。ビルドすれば、そのあとはデバッグなしで実行したりデバッグしたりすることもできるようになります。
 +
 
 +
 
 +
ここでは、Microsoft固有のものも含めて、なるべく多くのプリプロセッサを体系的にまとめたものについて記載したいと思います。
 +
 
 +
 
 +
ん~それで、具体的にはプリプロセッサって何?って話になりますが、よく出てくるプリプロセッサのひとつが#includeのようなディレクティブと呼んでいる記述による命令で、これはC言語の最初の学習でも学ぶことの多いヘッダファイルの指定のディレクティブです。ディレクティブというのはテレビのディレクターのような英単語と似た意味の英語で指示という意味をもっています。プリプロセッサは#includeに代表されるような#で始まる命令で構成されるディレクティブによって指定されます。
  
  

2015年2月23日 (月) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス