C 主机名称\u最大值在包含后未定义<;极限h>;
我不知道为什么它仍然说HOST_NAME_MAX是隐式声明 相反,我搜索了web并执行以下操作来修复它:C 主机名称\u最大值在包含后未定义<;极限h>;,c,hostname,C,Hostname,我不知道为什么它仍然说HOST_NAME_MAX是隐式声明 相反,我搜索了web并执行以下操作来修复它: #include <netdb.h> #包括 并使用MAXHOSTNAMELEN而不是HOST\u NAME\u MAX 然而,我不太确定这是一个好办法,以及背后的原因 使用grep: $ grep -rl '#define HOST_NAME_MAX' /usr/include 我们可以看到,HOST\u NAME\u MAX的定义如下: /usr/include/bit
#include <netdb.h>
#包括
并使用MAXHOSTNAMELEN
而不是HOST\u NAME\u MAX
然而,我不太确定这是一个好办法,以及背后的原因 使用
grep
:
$ grep -rl '#define HOST_NAME_MAX' /usr/include
我们可以看到,
HOST\u NAME\u MAX
的定义如下:
/usr/include/bits/local_lim.h
而/usr/include/bits/posix1_lim.h
包含了local_lim.h
:
# grep -rl local_lim.h /usr/include
/usr/include/bits/posix1_lim.h
而posix1\u lim.h
仅在定义了\u使用\u POSIX
的情况下才包含在限制中
#ifdef __USE_POSIX
/* POSIX adds things to <limits.h>. */
# include <bits/posix1_lim.h>
#endif
印刷品:
__USE_POSIX is defined
HOST_NAME_MAX: 64
中未定义主机名\u MAX
。你为什么期望它会这样?@Keith那么它的定义是什么?我已经检查过了,很抱歉,我错了。它是在
中定义的,但不是默认情况下定义的。(它由POSIX指定,而不是由C指定)。有一种方法可以指定您希望
定义它,但我记不得了。@KeithThompson谢谢!我将尝试搜索并查看其他人的想法……我可以看到它的实现与您发布的一样,但是从中我可以看到,根据标准,应该使用POSIX_C_SOURCE,而不是USE_POSIX。这不起作用(因为它不是这样编码的)。你知道为什么它没有用(POSIX_C_SOURCE)编码吗?在做了进一步的调查后,因为它在"posix1_lim.h"里面对我不起作用,我发现有些东西已经被更改了(主机名)MAX现在是(POSIX_主机名)MAX登录名(MAX现在是(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