mboost-dp1

C linux code, hvad betyder det?


Gå til bund
Gravatar #1 - Qw_freak
19. jul. 2012 15:31
void __attribute__ ((weak)) arch_suspend_disable_irqs(void){


Hvad betyder ((weak)) ?
Gravatar #3 - Qw_freak
19. jul. 2012 15:56
Ehj,,, total dårlig google-fu jeg har idag... :/ sry
Gravatar #4 - kasperd
19. jul. 2012 16:05
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:
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++)
Gravatar #5 - arne_v
19. jul. 2012 16:25
#4

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.
Gravatar #6 - kasperd
19. jul. 2012 16:37
arne_v (5) skrev:
Jeg tror ikke at der er nogen super pæn løsning.
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.

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.
Gravatar #7 - arne_v
19. jul. 2012 17:00
#6

Ved at begge definitionerne er i .h filen så burde risikoen for type fnidder være ret lille.

Og du kan naturligvis forbedre med en typedef.
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.

Opret Bruger Login