2012-09-25 3 views
3

dans mon projet avrstudio4 j'ai eu cette erreur:déclaration statique suit non statique

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

dans main.c type i #include "indication.h"

indication .h est un fichier d'en-tête pour indication.c et la fonction est définie dans celui-ci:

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

dans indication.c j'ai

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

Que dois-je faire?

+1

Est-ce que ce qui est dans votre fichier .c ne devrait pas avoir le '__attribute __ ((section (". Core ")))' après la signature? –

+0

Cela peut vous aider http://stackoverflow.com/questions/3148244/static-declaration-follows-non-static-declaration – Jeyaram

+1

Êtes-vous sur un système où 'Indication.c' et' indication.c' se réfèrent à la même fichier? Votre erreur de compilation est dans 'Indication.c', donc à moins que le système de fichiers ne soit sensible à la casse, vous regardez le mauvais fichier. (Mac et Windows sont généralement insensibles à la casse.) Votre version de GCC ne vous dit-elle pas où se trouve la déclaration précédente? –

Répondre

1

prises à leur valeur nominale, le message d'erreur signifie que la ligne 95 du fichier ../Indication.c (qui peut ou peut ne pas être le même fichier que le fichier nommé indication.c que vous discutiez), il y a une déclaration statique pour menu_boot tels que:

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

ou une définition statique de celui-ci, par exemple:

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

Consultez le code suivant dans un fil e xx.c:

extern unsigned char function(int abc); 

static unsigned char function(int abc); 

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

Lorsque compilé avec GCC 4.1.2 (sur RHEL 5), le compilateur dit:

$ 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 
$ 

Si je commente la ligne de trois, le compilateur dit:

$ 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 
$ 

Le message est le même, mais inclut les informations sur l'emplacement de la déclaration précédente. Dans ce cas, il est dans le même fichier source; Si la déclaration se trouvait dans un fichier source différent (généralement un en-tête) inclus dans l'unité de traduction, il identifierait cet autre fichier.

Questions connexes