Gcc错误:[enum]字段声明为函数

时间:2016-11-23 19:12:00

标签: gcc struct enums compiler-errors c11

我得到了这个奇怪的错误......

jos_log.c:16:13: error: field '_errno' declared as a function
    ERRNO    errno;
             ^

...当我编译这段代码时:

typedef enum ERRNO_
{
   /* ... */
}
ERRNO;

typedef struct LOG_ENTRY_
{
   char *   message;
   ERRNO    errno;    // <--- Error here
   ERR_SEV  severity;
}
LOG_ENTRY;

关于可能导致问题的任何想法?

1 个答案:

答案 0 :(得分:2)

翻译单元包含errno.herrno已经通过gcc (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 定义为预处理器宏,其定义会引发错误。

在我的情况下,使用#include <errno.h> typedef int ERR_SEV; typedef enum ERRNO_ { x } ERRNO; typedef struct LOG_ENTRY_ { char * message; ERRNO errno; ERR_SEV severity; } LOG_ENTRY; ,文件:

a.c:12:13: error: field ‘__errno_location’ declared as a function
    ERRNO    errno;
             ^

产生类似的错误:

#   define errno (*__errno_location ())

结果:

<bits/errno.h>
<{1>}内<errno.h>内{p}。没有#include <errno.h>, 没错。

除非您在发布不明智事件时输入了错字,否则这表明 您的 <errno.h>导入定义:

#define errno (*_errno ())

解决方案不是使用errno作为您的字段名称。