[英]Why doesn't “gcc -Wall” warn for “if (ptr < 0)”?
(说来话长……可以直接跳到最后的问题……)
我需要使用realpath(3)
所以我写了一个简单的例子来尝试:
$> cat realpath.c
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
char pathname[PATH_MAX];
if (realpath(argv[1], pathname) < 0) {
perror("realpath");
return 1;
}
printf("%s\n", pathname);
return 0;
}
$> gcc -Wall -o realpath realpath.c
$> ls /xxx
ls: cannot access '/xxx': No such file or directory
$> ./realpath /xxx/foo/bar
/xxx
./realpath /xxx/foo/bar
让我吃惊。 根据手册,使用ENOENT
失败更有意义。 我什至提到了 POSIX 并没有找到答案。 很长一段时间后,我重新阅读了手册,发现realpath(3)
返回char *
而不是int
。 我真的被gcc
激怒了。
那么为什么gcc (即使使用-Wall
)不警告if (ptr < 0)
?
那么为什么 gcc (即使使用
-Wall
)不报告if (ptr < 0)
的警告?
-Wall
标志的名称实际上具有误导性,因为它不会启用所有编译器警告。
您需要通过-Wextra
。 这样,您将收到以下编译器警告:
warning: ordered comparison of pointer with integer zero [-Wextra]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.