我可以在mmap手册页中看到错误条件期间的返回值为(void *)-1.
c编译器如何在常量之前处理(void *)
,这里-1
。
以下代码片段是检查mmap错误值的正确方法吗?
int *p;
p = (int *)mmap();
if(p == -1)
printf("error \n");
我们是否需要使用以下错误条件检查。
if(*p == -1)
printf("error \n");
答案 0 :(得分:4)
int *p = NULL;
void *ret = mmap();
if(ret == MAP_FAILED) { /* Or if(ret == (void *)-1) */
/* error */
} else {
p = ret;
}
使用(void *)-1
字面检查或使用MAP_FAILED
定义的(void *)-1
宏。
if(*p == -1)
不正确,因为除非确保指针的有效性,否则无法取消引用指针。否则,程序的行为是未定义的。