cat realpath.c #include #include #i-6ren">
gpt4 book ai didi

c - 为什么 "gcc -Wall"不警告 "if (ptr < 0)"?

转载 作者:行者123 更新时间:2023-12-02 05:32:34 24 4
gpt4 key购买 nike

(说来话长...可以直接跳到最后的问题...)

我需要使用 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 的结果让我吃了一惊。根据manual使用 ENOENT 失败更有意义.我什至提到了 POSIX,但没有找到答案。一段时间后,我重新阅读了手册并找到了 realpath(3)返回 char *而不是 int .我真的被gcc激怒了.

问题

那么为什么 gcc(即使使用-Wall)不警告if (ptr < 0)

最佳答案

gcc -Wall 不会启用 GCC 的所有警告!参见 this question获取更多信息。

在您的情况下,您需要添加 -Wextra 标志:

gcc -Wall -Wextra -o realpath realpath.c

根据 GCC's documentation :

This enables some extra warning flags that are not enabled by -Wall.

The option -Wextra also prints warning messages for the following cases:

  • A pointer is compared against integer zero with <, <=, >, or >=.

  • [...]

关于c - 为什么 "gcc -Wall"不警告 "if (ptr < 0)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com