Déclaration de variables globales dans le fichier d'en-tête ou le fichier source C
Je suis un peu confus au sujet de l'ensemble y compris les fichiers d'en-tête et de déclaration des variables.
Fichiers j'utilise sont: main.c, lib.h et lib.c.
principal.c
#include "lib.h"
void main(void)
{
//Code here
var++;
}
lib.c
#include <avr/io.h>
#include "lib.h"
void light_led(void)
{
//Code here
}
lib.h
volatile int var;
void light_led(void);
Est-ce la bonne façon de faire et y compris votre propre personnalisé bibliothèques?
pas de. ce n'est pas une déclaration, c'est une définition (ce sera la cause d'une erreur de l'éditeur de liens).
OriginalL'auteur Ankit | 2014-06-17
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
extern
mot-clé pour de tels cas et de ne pas définir des variables globales dans les en-têtes. Sinon, l'éditeur de liens de générer des erreurs lors de l'utilisation de vos fichiers d'en-tête.lib.c
lib.h
De cette façon vous serez en déclarant la variable globale dans les en-têtes et fait le définir dans le fichier source
lib.c
.Remarque: Notez la différence entre la déclaration et la définition d'une variable.
extern
mot-clé permet de la variable déclarée à l'avance sans être défini. Si vous n'aviez pas défini la variable danslib.c
, il y aurait une erreur lorsque vous avez essayé d'utiliser cette variable. Depuis, il est seulement déclaré mais, pas réellement défini.Edit: Le but entier de
static
est de déclarer qu'une variable est privé pour le fichier source est déclarée. Depuis,extern
fait le contraire en reliant une variable définie dans un autre fichier source, il défait le but destatic
.extern
dit que la variable a une liaison externestatic
dit que la variable a une liaison interne. Un identificateur peut pas avoir à la fois internes et externes à l'assemblage.Selon MSND:
Pour plus d'informations, consultez ci-dessous:
Merci. Ne savais pas que l'OP omis dans son code.
Ah oui, je n'avais pas remarqué.
Merci pour l'explication. Donc, fondamentalement, 'extern' mot clé permet de la variable globale, et si cela implique que les mots clés "extern" et "statique" ne seraient jamais utilisés ensemble comme ils le feraient dire le contraire des choses, c'est exact?
mise à jour de ma réponse à inclure
static
OriginalL'auteur Tamer Tas