gpt4 book ai didi

realpath 函数的转换问题(c 编程)

转载 作者:太空狗 更新时间:2023-10-29 11:34:55 24 4
gpt4 key购买 nike

当我编译以下代码时:

#define _POSIX_C_SOURCE 200112L
#define _ISOC99_SOURCE
#define __EXTENSIONS__

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
char *symlinkpath = argv[1];
char actualpath [PATH_MAX];
char *ptr;
ptr = realpath(symlinkpath, actualpath);
printf("%s\n", ptr);
}

我在包含对 realpath 函数的调用的行上收到一条警告,说:

warning: assignment makes pointer from integer without a cast

有人知道怎么回事吗?我正在运行 Ubuntu Linux 9.04

最佳答案

这很简单。 Glibc 将 realpath() 视为 GNU 扩展,而不是 POSIX。所以,添加这一行:

#define _GNU_SOURCE

... 在包含 stdlib.h 之前,以便它是原型(prototype)并已知返回 char *。否则,gcc 将假设它返回默认类型 int。除非定义了 _GNU_SOURCE,否则看不到 stdlib.h 中的原型(prototype)。

以下内容在没有警告的情况下很好地符合 -Wall passed:

#include <stdio.h>
#include <limits.h>

#define _GNU_SOURCE
#include <stdlib.h>

int
main(int argc, char *argv[])
{
char *symlinkpath = argv[1];
char actualpath [PATH_MAX];
char *ptr;
ptr = realpath(symlinkpath, actualpath);
printf("%s\n", ptr);

return 0;
}

您将在其他流行的扩展程序(例如 asprintf())中看到类似的行为。值得一看/usr/include/以确切了解该宏打开了多少以及它发生了什么变化。

关于realpath 函数的转换问题(c 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583873/

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