忍者ブログ
C言語のマクロについてです。C言語のマクロには落とし穴が多いので、マクロをマスターして引っかからないようにしましょう。そしてC言語の達人になってください。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

マクロが複数行になる時は、
行の終わりにバックスラッシュ(\)をつけて改行します。

例えば、次のように使います。

#define TOTAL_NUM	\
	(HEADER_NUM_1 + HEADER_NUM_2 + HEADER_NUM_3 +	\
	BODY_NUM_1 + BODY_NUM_2 + BODY_NUM_3 + 		\
	FOOTER_NUM_1 + FOOTER_NUM_2 + FOOTER_NUM_3)

バックスラッシュは、環境によっては
円記号(¥)と表示される場合もあります。
PR
関数マクロのメリット、デメリットを
とりまとめてみます。

<メリット>
・どんな型の実引数に対しても動作する。
・インラインコードに展開されるので、
 関数呼び出しのオーバーヘッドがない。

<デメリット>
・思わぬ不具合を生む可能性がある。
・引数の評価回数が複数になることにより、
 処理速度が遅くなるケースもありうる。
・何度も呼び出される場合に、コードサイズが大きくなる。
・アドレスを持たないので、アドレスを得ることができない。
C言語には、あらかじめ定義されたマクロがあります。
それは以下の7つです。

・__DATE__

__DATE__は、ソースがコンパイルされた日付です。
Mmm dd yyyyの形式を持つ文字列です。
月の名前はasctime関数でつくられるものと同じです。

・__FILE__

__FILE__は、ソースファイル名を表す文字列です。

・__LINE__

__LINE__は、行番号を表す整数定数です。
__LINE__が埋められたソースコードの
行番号を表します。
文字列ではないことに注意してください。

・__STDC__

__STDC__は、C言語の規格に合致している
処理系であるということを
示す整数定数で、値は1です。

・__STDC_HOSTED__

__STDC_HOSTED__は、処理系が規格に
合致しているホスト処理系であることを
示す整数定数で、値は1です。
規格に合致していなければ、値は0です。

・__STDC_VERSION__

__STDC_VERSION__は、規格のバージョンを表す
整数定数です。値は199901Lです。

・__TIME__

__TIME__は、コンパイルされた時刻を表します。
形式がhh:mm:ssの文字列です。
asctime関数で生成される時刻の形式と同じです。

これらのマクロ名は、
#defineや#undefの対象にしてはいけません。
ブログ内検索
バーコード
アーカイブ

Copyright © [ C言語のマクロ ] All rights reserved.
Special Template : 忍者ブログ de テンプレート
Special Thanks : 忍者ブログ
Commercial message : [PR]