我得到了这个奇怪的错误......
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;
关于可能导致问题的任何想法?
答案 0 :(得分:2)
翻译单元包含errno.h
,errno
已经通过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
作为您的字段名称。