忍者ブログ
RoboCup Junior Japan Rescue Kanto OB

             2005~2013
[269]  [268]  [267]  [266]  [265]  [264]  [263]  [261]  [260]  [259]  [258
今日の記事はプリプロセッサについてです。

プリプロセッサってなんでしょう、という話から始まるのですが、

別に難しいものではありません。

というより、C言語を齧ったことがあって、この単語を知らない人は、

十中八九名前を知らずに使っている場合が殆どでしょう。

Cの場合(でなくとも)、使わないとほとんど何もできないに等しいですからね。



ところで、これは何かというと


・・・。

コンパイラです。

というより今のコンパイラに付属されている機能といった方が正しいでしょう。

じゃあこのプリプロセッサはどういう機能なのかと言いますと、「ある処理を実行する機能」という答えになります。

では、それはどういう処理かと言いますと、

例えば、
#include

例えば、
#define

このあたりがC言語だと一番有名でしょうね。(というより主なものを挙げるとこれしかないような・・・)

まぁあとは#ifとか#ifdefとかその類のものがあったり・・・します。

どちらも単体で意味は知っていたりするものでしょうね。



#includeは日本語にすると、「含む」とか「組み込む」という意味になります。

これは要するに別のファイルで定義した関数や定数等をプログラムで使いたいときに使用するものですね。

例えばプログラム内に、#include"stdio.h"

と書くと、stdio.hのファイル内に定義された関数等をそのプログラムで使用することができます。

この.hの拡張子のファイルはプログラムにおける、定義ファイルのようなもので、

ライブラリファイルとかヘッダファイルなどと呼ばれています。

ここにC言語の時と同じように関数や定数を定義することで、プログラムの方で#includeを記述すると

プログラム内でヘッダファイルで定義した関数等が使えるようになるというものです。

ただヘッダを作る際には場合によって、環境変数をいじらなくてはならないのでちょっとめんどくさいです。

ちなみに記述方法は2通りあって、

#include"ヘッダ名"

#include<ヘッダ名>

の2通りです。どちらでも意味は変わりません。


また、#defineは日本語にすると「定義」になります。これはそのままの意味、つまり定数を定義するのもので

#define X 10

などと書くことで数字を文字に置換することができるものです。

プログラム内にこれを記述することで、そのプログラム内ではXという文字は数字の10と同様の扱いになります。

例えば上の#defineと変数xが定義されたプログラムなら、

if(x==10)と、

if(x==X)は、同一のものとなります。



まぁこのような処理を行うものをプリプロセッサといいます。

これには大体最初に#が入っているのですぐにわかるようになっていると思います。

まぁなんでこれらが総称して、このように呼ばれているかと言いますと、

プリプロセッサに該当するものはすべて、プログラムをコンパイルした時に、

ソースそのものがコンパイルされる前に、「前処理」という形で処理されます。

まぁ要するに一番最初にコンパイルされる、という言い方が分かり易いでしょうか。(ちょっと違う気がするけど・・・)

この「前処理」を英訳すると、

前→pre

処理→process

前+処理=pre+process=preprocess

これを名詞にしてみると→preprocessor

∴ プリプロセッサという訳です。


また、このプリプロセッサを行う命令、

つまり#include#defineのことをディレクティブとか言ったりします。(この単語絶対使わないな・・・)


というわけで今日は前処理についてのお話でした。

このディレクティブについてですが、

基本的に関数の外、プログラムの一番上に宣言部としてまとめて宣言するのが通例ですね。


ちなみに僕の場合、このディレクティブ、宣言部だけで

副部長のプログラムの総量(約140行)を超えています(笑)



(^・ω・)ノ RadiumProduction in RoboCup Junior
Comments
※コメントは内容確認後に手動で公開するようにしております。反映までしばらくお待ちください。
Your Name
Title
color
Comment
 


無題
Kiwi-JPN
えっ、なんでそんなにあるんですか?

僕は20行…

task main()は17行…
2011/09/04(Sun)23:11:03

無題
Luz
Kiwi-JPN様
それみんなから言われます。

でも・・・普通になりますよ(笑)

メインタスクが少ないのはまぁ・・・ありがちですよね。

全部関数に入れた結果が・・・なんてことは茶飯事でしょうし。
2011/09/04(Sun)23:14:14
カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
最新CM
[05/09 ONE RoboCuper]
[05/07 HDD ほしいよー]
[04/21 ブラック3辛]
[12/26 bols-blue]
[06/08 ONE RoboCuper]
かうんた
カウンター カウンター
らじぷろ目次
らじぷろ検索機
プロフィール
HN:
Luz
性別:
男性

PR

忍者ブログ 2007-2021,Powered by Radium-Luz-Lα+-Rescatar in RadiumProduction [PR]


Related Posts Plugin for WordPress, Blogger...