C言語では、** #ifdef ** や ** #ifndef ** を使うことによって、条件付きのコンパイルが可能となる。

#ifdefの使い方と意味

#ifdefは、次のようにして使う。
c>>
#ifdef MACRO
 ・
 ・
 ・
#endif
<<c

これは、「MACROが定義されている場合は、#ifdef~#endifの中を有効にする」という意味である。

#ifndefの使い方と意味

次に、#ifndefは、逆の意味で、以下のように使う。
c>>
#ifndef MACRO
 ・
 ・
 ・
#endif
<<c

これは、「MACROが定義されていない場合は、#ifndef~#endifの中を有効にする」という意味である。

C言語でヘッダーを書くときの定石

この#ifndefを使ってヘッダーを書く、C言語の定石(?)がある。

以下のような、ヘッダーファイル my.h を定義する。
c>>
#ifndef MY_H /* ヘッダーの最初 /
#define MY_H
 ・
 ・
 ・
#endif /
ヘッダーの最後 */
<<c

こうすることによって、複数のソースから my.h がインクルードされていたとしても、** 確実に1度だけ ** my.h の中身を有効にすることができる。

これで、ヘッダーファイルの管理も楽になりますね!!

posted by y_tsuda y_tsuda on Fri 21 Nov 2008 at 10:41 with 0 comments
Contents rssrss
Xperiaにインストールして1週間生き残ったアプリたち
gem serverをIE8から見るとヒドイことになる現象を解決
gem serverをIE8から見るとヒドイことに
Twitter, Account Suspended
GentooにRuby1.9をインストールした
GentooにScalaをインストールしてみた
多面ディスプレイ環境を手作りしてみた
lower-camel caseな文字列とアンダースコア区切りな文字列の相互変換をRubyで
topコマンドでのCPUコア毎の表示
Fedora11 (on VirtualBox) 速効レビュー
Tags
rubyGentooDIYFedoralinuxmemoScalatwitterunixvirtualboxweb
Comments rssrss
rysonqem rysonqem: something new and exciting rysonqem http://www.g2... 04/23 23:37
cvcwcbbfp cvcwcbbfp: something new and exciting [url=http://www.g1h6r6... 04/10 13:40
Aleksey Aleksey: The uname check is only due to a somewhat sloppy t... 02/02 07:03
Yu Tsuda Yu Tsuda: あぁ、そうですね、、syncすると戻ってしまいますね・・・。 ご指摘ありがとうございます!! 07/11 15:38
ursm ursm: /usr/portage 以下のファイルは更新のたび元に戻ってしまうので、/etc/portage/... 07/11 13:46
Yu Tsuda Yu Tsuda: 見た目だけでも、わざわざGentooをこういうリストに入れてるのがすごいなぁと思ったりしたのです(笑... 03/31 19:49
Leonard Chin (レオ) Leonard Chin (レオ): ただし、VirtualBoxで「Gentoo」などを選択しても、別にどのOSを入れても大丈夫だ。あく... 03/31 13:00
Yu Tsuda Yu Tsuda: この機能、結構便利なんですよねー。 またEmacsで便利な機能を見つけたらブログに書きまーす。 11/27 23:46