マクロ(#define)を理解していない人がいたので簡単にメモ。
プリプロセッサの段階で展開されるのだよ。
コンパイルの前ですよ。と、言って理解できる人は何も言わなくても理解できる人。
以下のプリント文は同じですよ。
#include <stdio.h>
#define STR_ABCDE "ABCDE"
int main(int argc, char *argv)
{
printf("%s", "ABCDE");
printf("%s", STR_ABCDE);
return 0;
}
下も結果は同じだよ 。固定長の文字列長を求めるならば、strlen()ではなくsizeof()-1で求めた方が早くてよいです。
#include <stdio.h>
#define MY_STRLEN(x) (sizeof(x)-1)
#define STR_ABCDE "ABCDE"
int main(int argc, char *argv)
{
printf("%d", strlen(STR_ABCDE));
printf("%d", MY_STRLEN(STR_ABCDE));
return 0;
}
gccを使用している場合にtest.cで試してみるといいよ。
$ gcc -e test.c >> test.e
と打って、test.eを確認するのだ。プリプロセッサが終わった段階のコードが見れるよ。
#if 0とかでくくった部分がなくなったりするよ。
色々試すのだよ。トライアンドエラーだ!!
では、シャケなベイビー!!
- 作者: 平林雅英
- 出版社/メーカー: 技術評論社
- 発売日: 1997/05
- メディア: 単行本
- 購入: 3人 クリック: 25回
- この商品を含むブログ (18件) を見る