しゃけなべいびー雑多

シャケについて真剣に語ります(嘘)

C言語 マクロと文字列長

マクロ(#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とかでくくった部分がなくなったりするよ。

色々試すのだよ。トライアンドエラーだ!!

 

では、シャケなベイビー!!

新ANSI C言語辞典

新ANSI C言語辞典