【C言語】
ポインタは負になるか?
(void *)-1の使い方

ポインタは負値になるか?

warning: ordered comparison of pointer with integer zero

警告:整数の0とのポインタの比較
[-Wextra]


■ポインタは負値にならない

#include    <stdio.h>
#include    <sys/shm.h>
int main(void) {
    void    *ptr = shmat(0,0,0);
    if(ptr < 0){//成立する事はない
        perror("shmat");
    }
}

成功時ポインタを返し
失敗時-1を返す関数の失敗判定でポインタは0より小さくならないので、このif文が成立する事はありません。


■(void *)-1と比較する

#include    <stdio.h>
#include    <sys/shm.h>
int main(void) {
    void    *ptr = shmat(0,0,0);
    if(ptr == (void *)-1){//成立する事がある
        perror("shmat");
    }
}

成功時ポインタを返し
失敗時-1を返す関数の失敗判定はこのように記述してください。