2016-11-23 77 views
1

我得到這個奇怪的錯誤...gcc的錯誤:[枚舉]字段聲明爲函數

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

翻譯單元包括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>

,內<errno.h>。沒有#include <errno.h>, 沒有錯誤。

除非您張貼disgnostic輸入有誤,這將表明 是<errno.h>進口的定義:

#define errno (*_errno()) 

解決的辦法是不使用errno爲您的字段名。

+0

就是這樣!謝謝! –