包含后,HOST_NAME_MAX未定义

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

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

#include  

并使用MAXHOSTNAMELEN而不是HOST_NAME_MAX

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

使用grep

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

我们可以看到HOST_NAME_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 

只有在定义了__USE_POSIX才包含__USE_POSIX

 #ifdef __USE_POSIX /* POSIX adds things to . */ # include  #endif 

所以,如果您的代码如下:

 #define __USE_POSIX #include  

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

 #include  #include  #include  #include  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