包含<limits.h>后,HOST_NAME_MAX未定义

时间:2015-05-06 17:51:24

标签: c hostname

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

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

#include <netdb.h>

并使用MAXHOSTNAMELEN代替HOST_NAME_MAX

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

1 个答案:

答案 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