warning: comparison between pointer and zero character constant
警告:ポインタと終端文字’\0’との比較
[-Wpointer-compare]
■1.ポインタと終端文字\0を比較するの誤り
#include <stdio.h>
void ng(char *p)
{
if(p == NULL) {
printf("NULLポインタ\n");
return ;
}
if(p == '\0') {//NG:ポインタと終端文字¥0との比較
printf("空文字列\n");
return ;
}
}
int main(void)
{
ng("") ;
ng(NULL) ;
}
ポインタと終端文字¥0を比較するのは多くの場合誤りです。
if( p == ‘\0’) // 「ポインタが終端文字\0」 ではなくて
if( p == NULL) // 「ポインタがNULLポインタ」か
if(*p == ‘\0’) // 「ポインタの指す先が終端文字\0」 の
どちらかでしょう。

■2.標準をローカル表現に再定義すると混乱
#define ZERO 0U
#define EOS '\0' //end of string
#define NULLPTR NULL
#define NULLSTRING ""
0,NULL,’¥0’,””の使い分けができない場合が多いので
プロジェクトによってはこのような再定義をする場合があります。
しかし教科書にのっている表現をわざわざローカルな表現にすると
かえって混乱するので避けたほうが良いでしょう。

■3.発音と表記の提案
聖典 プログラミング言語C石田晴久訳では’¥0’をヌル文字と訳されていますが、ちまたではNULL文字、NULL終端文字と表記される場合が非常に多いため、初心者はNULLと’\0’を混同してしまいます。
そこで提案ですがソースコードレビューやコード中のコメントには以下のようにすると混乱しないと思います。
NULL
表記:NULLポインタ
発音:ぬるぽいんた
’¥0’
表記:終端文字¥0
発音:しゅうたんもじえんぜろ
または
発音:しゅうたんもじぎゃくすらぜろ

参考:
http://www.kouno.jp/home/c_faq/c5.html
■4.クイズ
●クイズのヒント(コンパイルエラーにならないのはどれ?)
#include <stdio.h>
int main(void){
printf("%p\n",&NULL);
printf("%p\n",&'\0');
printf("%p\n",&"");
printf("%p\n",&0);
}