9

私の知る限り、CNULLでは次のように定義されています。

#define NULL ( (void *) 0)

では、どのように定義すればよいのNULL_POINTERでしょうか? 私は自分のプログラムで同じように定義し、うまくいきましたが、それは単なる偶然だと思います:

#define NULL_POINTER ( (void *) 0)

もしあれば、論理的な定義は何でしょうか?

4

2 に答える 2

16
#define NULL ( (void *) 0)

#define NULL 0

両方とも有効です。null ポインター用に独自のマクロを実装する必要がある場合は、同じ規則が適用されます。

C11(ISO/IEC 9899:201x) §6.3.2.3ポインタセクション 3

値を持つ整数定数式0、または型にキャストされたそのような式 void *は、NULL ポインター定数と呼ばれます。

于 2013-09-13T08:20:16.657 に答える
4

NULL0が等しいのはポインタ コンテキストだけです。NULL別の種類の0が必要な場合は、それが機能する可能性がありますが、使用しないでください。使用すると、間違ったスタイルのメッセージが送信されるためです。(さらに、ANSI では の定義NULLを be((void *)0)にすることができますが、これはポインター以外のコンテキストではまったく機能しません。) 特に、NULLASCII ヌル文字 (NUL) が必要な場合は使用しないでください。独自の定義を提供する

#define NUL '\0'

NULLポインター定数としてのみ使用してください。

于 2013-09-13T08:27:02.713 に答える