2012-09-25 73 views
3

我已經得到了這個錯誤:靜態聲明如下我avrstudio4項目非靜態

../Indication.c:95:15: error: static declaration of 'menu_boot' follows non-static declaration 

main.c中 i型的#include 「indication.h」

指示.h是一個頭文件indication.c和功能定義如下:

unsigned char menu_boot(unsigned char index, unsigned char *menu1) 
__attribute__((section(".core"))); 

indication.c我有

#include "indication.h" 
... 
unsigned char menu_boot(unsigned char index, unsigned char *menu1) 

我應該怎麼辦?

+1

你的.c文件中的內容在簽名後還沒有'__attribute __((section(「。core」)))''' –

+0

這可能會幫助你http://stackoverflow.com/questions/3148244/static-declaration-follows-non-static-declaration – Jeyaram

+1

你是否在一個系統,其中'Indication.c'和'indication.c'引用相同文件?你的編譯錯誤在'Indication.c'中,所以除非文件系統區分大小寫,否則你正在查看錯誤的文件。 (Mac和Windows通常不區分大小寫。)您的GCC版本不會告訴您以前的聲明在哪裏? –

回答

1

從表面,該錯誤消息表示在文件../Indication.c(其可以是或可以不是相同的文件名爲indication.c您討論該文件)的95行,對於作爲這樣menu_boot靜態聲明:

static unsigned char menu_boot(unsigned char index, unsigned char *menu1); 

或它的靜態定義,如:

static unsigned char menu_boot(unsigned char index, unsigned char *menu1) 
{ 
    ... 
} 

考慮下面的代碼在FIL Ëxx.c

extern unsigned char function(int abc); 

static unsigned char function(int abc); 

static unsigned char function(int abc) 
{ 
    return abc & 0xFF; 
} 

當與GCC 4.1.2編譯(在RHEL 5),編譯器說:

$ gcc -c xx.c 
xx.c:3: error: static declaration of ‘function’ follows non-static declaration 
xx.c:1: error: previous declaration of ‘function’ was here 
$ 

如果我註釋掉線三條,那麼編譯器說:

$ gcc -c xx.c 
xx.c:6: error: static declaration of ‘function’ follows non-static declaration 
xx.c:1: error: previous declaration of ‘function’ was here 
$ 

該消息是相同的,但包括有關以前聲明位置的信息。在這種情況下,它位於同一個源文件中;如果聲明位於翻譯單元中包含的不同源文件(通常是標題)中,則會標識其他文件。