5

重複の可能性:
typedef と #define は c で同じですか?
#define と typedef で混乱

次の違いはありますか。

#define NUM int

...

NUM x;
x = 5;
printf("X: %d\n", x);

この:

typedef int NUM;

...

NUM x;
x = 5;
printf("X : %d\n", x);

どちらのテストも問題なくコンパイルおよび実行されます。それで、それらは同等ですか?

ありがとう。

4

1 に答える 1

22

ポインター型のエイリアスを作成する場合は違いがあります。

typedef int *t1;
#define t2 int *

t1 a, b; /* a is 'int*' and b is 'int*' */
t2 c, d; /* c is 'int*' and d is 'int'  */

さらに、typedefスコープ規則に従います。つまり、ブロックに対してローカルな型を宣言できます。

一方、#defineプリプロセッサ ディレクティブで型を管理する場合に使用できます。

于 2012-08-30T17:27:11.190 に答える