3

在我的 avrstudio4 项目中,我遇到了这个错误:

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

main.c我输入#include "indication.h"

指示.h是指示.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)

我应该怎么办?

4

1 回答 1

2

从表面上看,错误消息意味着在文件的第 95 行../Indication.c(可能与您讨论的文件名称相同,也可能不同indication.c),有一个静态声明,menu_boot例如:

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

或它的静态定义,例如:

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

考虑文件中的以下代码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
$

该消息是相同的,但包含有关先前声明所在位置的信息。在这种情况下,它在同一个源文件中;如果声明位于翻译单元中包含的不同源文件(通常是标题)中,则它将标识该其他文件。

于 2012-09-25T13:41:44.580 回答