我不知道为什么它仍然说HOST_NAME_MAX是隐式声明。
相反,我在网上搜索并执行以下操作来修复它:
#include <netdb.h>
并使用MAXHOSTNAMELEN
代替HOST_NAME_MAX
答案 0 :(得分:9)
使用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
posix1_lim.h
仅在limits.h
定义时才包含__USE_POSIX
:
#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