|
ども。
>の使い方が解りません。コンパイルをしたりしなかったりするのでしょうか?詳しく教えてください。
はい、コンパイルをしなかったりします。 ちなみに小文字です。
#ifや#ifdefや#ifndefは#elseや#elifや#elseまでの間のコードを有効に したり無効にしたりします。式に指定できるのは定数式のみです。 それぞれの詳細はマニュアルのプリプロセッサの項目をあたってください。 ここでは使用例をいくつか挙げておきます。
例1
#if
0 code #endif
codeの部分をコンパイルしません。/**/よりも便利な点として、ネスト 可能、コードをコメントイン/アウトするのが簡単(特にコードが長いとき)等 があります。
例2
#ifdef
symbol code #endif
#define
symbolとされているときにcodeが有効になります。#define
symbol は自分で書く場合もありますが、それよりも、コンパイラがデフォルトで #defineしている、システムに関係のあるシンボルを利用することが けっこうあります。それをつかって、システムに固有のコードをONに したりして、移植性の高いコードを書くことができます。例えば、 Windows系のコンパイラでは_WIN32が定義されています。
例3
#ifndef
MODULE_H #define NODULE_H code #endif
/*module.h*/
多分知らないうちに使っているのがこれ。ヘッダファイルはまずこうなって います。codeにはヘッダファイルの本体すべてが書かれます。これの効果は 複数回#includeされても実際に有効なのは最初の1回のみになります。実際 に、stdio.h等のヘッダをみて確認してみてください。
以下は規格で決まっているわけではないけど、大抵の処理系で使える方法。 詳細はマニュアルを。
コンパイラのオプションで、プリプロセッサだけを走らせるものがたぶん あります。また、プリプロセッサ単体を直接起動することもできるかも しれません。
コンパイル時に、コード中に#define
symbolと書いてあるのとおなじように 扱ってくれるオプション(たぶん-Dsymbol)がたいていあります。これと上記 例2を組み合わせると、***ソースに手を加えることなく***コメントイン/ アウトができたり、定義されているべきシンボルが定義されていない場合に 調節したりできます。また、#define
a
bのタイプの定義もたぶんできますが これも例1と組み合わせると便利なことがあるかもしれません。
いま思いついたのはこれくらいです。処理系のヘッダファイルを見ても いくつかの手法が見つかります(Windowsの処理系で、WindowsやIEの バージョンで処理を分けてたり)。また、ベクターあたりで適当な プログラムのソース(移植性が高そうなキャラクタベースのがよいかと) を拾ってきてながめてもいろいろわかると思います。
では。
|