2017-02-03 2 views
0

J'essaie de déclarer une variable globale et, pour une raison quelconque, le compilateur n'aime pas cela. Il dit qu'il n'a pas de classe de stockage ou de spécificateur quand j'ai déjà donné le type. Il y a juste une minute, ils étaient locaux à principal, mais maintenant je viens de réaliser que je vais avoir besoin de ces globaux, et pour une raison quelconque, ça ne me laisse pas. Je veux que ces variables soient vues par toutes mes fonctions, mais la plupart de mes fonctions ne sont actuellement pas en main. Donc je veux qu'ils soient partagés par toutes les fonctions.Erreurs du compilateur lors de la déclaration des variables globales

char pa, pb, pc, pd, pe, pf, pg, ph, pi, pj, pk, pl, pm, pn, po; 
    pa = 'o'; 
    pb = pc = pd = pe = pf = pg = ph = pi = pj = pk = pl = pm = pn = po = '+'; 
+7

Vous devez initialiser ces variables au point de déclaration ou dans une sorte de fonction d'initialisation. Vous ne pouvez pas écrire des instructions comme 'pa = 'o';' en dehors d'une fonction. – user2357112

+2

Toutes ces variables globales ne vont pas gagner de prix de design ... Utilisez un tableau local et transmettez-le à vos fonctions. – DeiDei

+0

L'affectation exclut les tableaux:/ –

Répondre

1

vous devriez mettre votre code dans une fonction main() comme ceci. j'ai pu compiler ce sous Windows 7.

#include <stdio.h> 

/* Declare global variables for this module */ 
char pa, pb, pc, pd, pe, pf, pg, ph, pi, pj, pk, pl, pm, pn, po; 

int main(int argc, char *argv[]) 
{ 

    /* Assign your global variables */ 

    pa = 'o'; 
    pb = pc = pd = pe = pf = pg = ph = pi = pj = pk = pl = pm = pn = po = '+'; 
} 
1

Vous pouvez déclarer et assigner une variable (unique) à l'extérieur d'une fonction. Transformer votre déclaration à unique déclarations:

#include <stdio.h> 

char pa = 'o'; 
char pb = '+'; 
char pc = '+'; 
/* many others, omitted for brevity */ 

int main() { 
    printf("%c, %c", pa, pb); 
} 

réalise ce que vous voulez, sans déclaration de division et de la cession.

Notez que ceci:

char pb = '+'; 
char pc = pb; 

pourrait, dans un certain sens, le travail: lorsque le compilateur voit char pc=pb:, il a toutes les informations nécessaires pour déclarer PC et l'initialiser à pB. Mais ce n'est pas parce qu'il n'est pas assez intelligent (plus probablement parce que le langage dit que ce type d'initialiseur (pb) doit être une constante).

+0

Il fonctionnerait également avec toutes les déclarations sur la même ligne. La lisibilité est la question. – Quentin

+0

Je veux dire 'char pa = 'o', pb = '+', ...;'. – Quentin

+0

@Quentin Oui. En outre, dans ce cas, je trouve plus à l'aise d'utiliser des lignes en double, puis beaucoup de taper down-bs-d-bas-bs-e-bas-bs-f-bas-bs-g-bas-bs-h ... ah ah ah! – linuxfan