为什么即使我定义了 _GNU_SOURCE 也无法访问 uname 结构的域名成员

Mel*_*lan 5 c linux macros

我试图通过调用 uname 系统调用来获取 Linux 内核版本信息,但我收到一个编译器错误说 ‘struct utsname’ has no member named ‘domainname’

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>

#define _GNU_SOURCE

int main(void) {

   struct utsname buffer;

   errno = 0;
   if (uname(&buffer) != 0) {
      perror("uname");
      exit(EXIT_FAILURE);
   }

   printf("system name = %s\n", buffer.sysname);
   printf("node name   = %s\n", buffer.nodename);
   printf("release     = %s\n", buffer.release);
   printf("version     = %s\n", buffer.version);
   printf("machine     = %s\n", buffer.machine);

   #ifdef _GNU_SOURCE
      printf("domain name = %s\n", buffer.domainname);
   #endif

   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

根据https://linux.die.net/man/2/uname struct utsname 是

struct utsname {
    char sysname[];    /* Operating system name (e.g., "Linux") */
    char nodename[];   /* Name within "some implementation-defined
                          network" */
    char release[];    /* Operating system release (e.g., "2.6.28") */
    char version[];    /* Operating system version */
    char machine[];    /* Hardware identifier */
#ifdef _GNU_SOURCE
    char domainname[]; /* NIS or YP domain name */
#endif
};
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里错过了什么

Kam*_*Cuk 6

来自man feature_test_macros

注意:为了有效,必须在包含任何头文件之前定义功能测试宏

它的:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>
Run Code Online (Sandbox Code Playgroud)