mboost-dp1
C linux code, hvad betyder det?
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Det minder mig om et andet spørgsmål jeg har, som måske er relateret.
Jeg har et program som ved opstart lægger oplysninger om konfigurationsindstillinger i nogle globale variable. Nogle af disse har jeg brug for at kunne læse fra forskellige c filer, derfor har jeg defineret dem som extern i en h fil.
Jeg ville gerne definere dem som const i h filen, så de ikke kan ændres fra andre steder end den c fil som ejer variablen.
F.eks. i min .h fil står der:
Nu ville jeg gerne sikre mig at andre filer ikke kan skrive til variablen, så jeg prøvede at ændre linien i .h filen til
Er det noget som en weak attribute kan hjælpe med? Eller findes der en anden løsning? (Og at skifte til C++ er ikke en løsning, for jeg bruger faktisk nogle af de features, der findes i C men ikke i C++)
Jeg har et program som ved opstart lægger oplysninger om konfigurationsindstillinger i nogle globale variable. Nogle af disse har jeg brug for at kunne læse fra forskellige c filer, derfor har jeg defineret dem som extern i en h fil.
Jeg ville gerne definere dem som const i h filen, så de ikke kan ændres fra andre steder end den c fil som ejer variablen.
F.eks. i min .h fil står der:
extern int teredo_is_enabled;I en af mine .c filer står der så
int teredo_is_enabled=0;og længere nede
n=find_one(cfg,"teredo");
if (n) {
teredo_is_enabled=1;
Nu ville jeg gerne sikre mig at andre filer ikke kan skrive til variablen, så jeg prøvede at ændre linien i .h filen til
extern const int teredo_is_enabled;Men det virker ikke for så får jeg fejlen
config.c:4: error: conflicting type qualifiers for ‘teredo_is_enabled’
easyv6.h:183: note: previous declaration of ‘teredo_is_enabled’ was here
make: *** [config.o] Error 1
Er det noget som en weak attribute kan hjælpe med? Eller findes der en anden løsning? (Og at skifte til C++ er ikke en løsning, for jeg bruger faktisk nogle af de features, der findes i C men ikke i C++)
#4
Jeg tror ikke at der er nogen super pæn løsning.
Jeg ville lave det som:
i .h filen og så erstatte:
med (ovenfor #include naturligvis):
i .c filen.
Jeg tror ikke at der er nogen super pæn løsning.
Jeg ville lave det som:
#ifndef CFG_OWNER
extern const int teredo_is_enabled;
#else
int teredo_is_enabled = 0;
#endif
i .h filen og så erstatte:
int teredo_is_enabled = 0;
med (ovenfor #include naturligvis):
#define CFG_OWNER
i .c filen.
Dit forslag checker til gengæld ikke om typen er den samme i begge tilfælde. Det jeg gerne ville opnå var at typen blev sammenlignet så at jeg ville få en fejl eller en advarsel i tilfælde at typen bortset fra const var identisk i de to tilfælde. Altså samme typecheck som når der tildeles en pointer.arne_v (5) skrev:Jeg tror ikke at der er nogen super pæn løsning.
Hvis jeg er nødt til at vælge vil jeg hellere have checket typen fremfor at const bliver overholdt. Jeg tror der er større risiko for at komme til at lave en typefejl ved et uheld end at ikke overholde const definitionen.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.