gpt4 book ai didi

c - 包含 后未定义 HOST_NAME_MAX

转载 作者:太空狗 更新时间:2023-10-29 14:56:03 24 4
gpt4 key购买 nike

我不知道为什么它仍然说 HOST_NAME_MAX 是隐式声明。

相反,我在网上搜索并执行以下操作来修复它:

#include <netdb.h>

并使用 MAXHOSTNAMELEN 而不是 HOST_NAME_MAX

但是,我不太确定这是不是一个好方法,以及它背后的原因。

最佳答案

使用grep:

$ grep -rl '#define HOST_NAME_MAX' /usr/include

我们可以看到 HOST_NAME_MAX 定义在:

/usr/include/bits/local_lim.h

并且local_lim.h被包含在/usr/include/bits/posix1_lim.h中:

# grep -rl local_lim.h /usr/include
/usr/include/bits/posix1_lim.h

只有在定义了 __USE_POSIX 时,posix1_lim.h 才会包含在 limits.h 中:

#ifdef  __USE_POSIX
/* POSIX adds things to <limits.h>. */
# include <bits/posix1_lim.h>
#endif

因此,如果您的代码如下所示:

#define __USE_POSIX
#include <limits.h>

您应该有可用的 HOST_NAME_MAX 常量。话虽如此,在我的系统上 __USE_POSIX 似乎是默认定义的。例如下面的代码:

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

#include <limits.h>

int main(int argc, char **argv) {
#ifdef __USE_POSIX
printf("__USE_POSIX is defined\n");
#endif
printf("HOST_NAME_MAX: %d\n", HOST_NAME_MAX);
return 0;
}

打印:

__USE_POSIX is defined
HOST_NAME_MAX: 64

关于c - 包含 <limits.h> 后未定义 HOST_NAME_MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084116/

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