I C, hvordan erklærer dere medlemmer av en struktur som flyktig?

stemmer
17

Hvordan erklærer du et bestemt medlem av en struct som flyktig?

Publisert på 11/06/2009 klokken 06:52
kilden bruker
På andre språk...                            


6 svar

stemmer
25

Nøyaktig det samme som ikke- structfelt:

#include <stdio.h>
int main (int c, char *v[]) {
    struct _a {
        int a1;
        volatile int a2;
        int a3;
    } a;
    a.a1 = 1;
    a.a2 = 2;
    a.a3 = 3;
    return 0;
}

Du kan markere hele structså flyktige ved hjelp "volatile struct _a {...}"men metoden ovenfor er for enkeltfelt.

Svarte 11/06/2009 kl. 06:59
kilden bruker

stemmer
9

Bør være ganske rett frem i henhold til denne artikkel:

Til slutt, hvis du bruker volatile til en struct eller forening, hele innholdet i struct / forening er flyktige. Hvis du ikke vil ha dette problemet, kan du bruke den flyktige kvalifiseringen til de enkelte medlemmene av struct / forening.

Svarte 11/06/2009 kl. 06:59
kilden bruker

stemmer
1

Jeg trenger å avklare volatile for C / C ++ fordi det var et galt svar her. Jeg har vært programmering microcontroleurs siden 1994 hvor dette søkeordet er svært nyttig og nødvendig ofte.

volatile vil aldri bryte koden, er det aldri risikabelt å bruke den. Nøkkelordet vil i utgangspunktet være sikker på variabelen er ikke optimalisert av kompilatoren. Det verste som shold skje hvis du overdrive dette søkeordet er at programmet vil bli litt større og tregere.

Her er når du trenger dette søkeordet for en variabel: - Du har en variabel som er skrevet for å inne en avbruddsfunksjon. OG - Denne samme variabel leses eller skrives til utenfor avbruddsfunksjoner. Eller hvis du har 2 avbrudds funksjoner av ulik prioritet som bruker variabel, bør du også bruke 'volatile'.

Ellers er nøkkelordet ikke nødvendig.

Som for maskinvare registre, bør de behandles som flyktige selv uten søkeord hvis du ikke gjør rare ting i programmet.

Svarte 15/05/2018 kl. 15:35
kilden bruker

stemmer
1

Bare en advarsel på C / C ++ volatile søkeord.

Med mindre du vet hva du gjør bør du aldri bruke det.

C / C ++ volatile! = Java / C # volatile

flyktige hjelper ikke i gjenge kode med mindre du virkelig vet hva du gjør, må du bruke C ++ 0x atom mal (eller noe lignende).

Den eneste gangen jeg har måttet bruke volatile er når styrer maskinvare registre.

Svarte 11/06/2009 kl. 08:13
kilden bruker

stemmer
0

Jeg nettopp ferdig med en datastruktur der det var tydelig hvor flyktige kvalifiseringen var nødvendig, men av en annen grunn enn de som er nevnt ovenfor: Det er rett og slett fordi struct krever en kraftig låsemekanisme på grunn av (i) direkte tilgang og (ii ) tilsvarende påkalling .


Direkte tilgang til avtaler med vedvarende RAM lesing og skriving.

Tilsvar påkallelse avtaler med utskiftbare metoden strømmer.


Jeg har ikke hatt mye hell med dette søkeordet, med mindre kompilatoren vet nøyaktig hva de skal gjøre med det. Og det er min egen personlige erfaring. Men jeg er interessert i å studere hvordan det direkte påvirker en kryssplattform kompilering for eksempel mellom et lavt nivå systemkall og en back-end database.

Svarte 27/08/2019 kl. 19:42
kilden bruker

stemmer
0

Hvis medlemmene erklært som flyktige ikke er endret på grunn av vedlikehold noen avbrudd (dvs. et signal handler eller annet (nær) atom variabel), bør du sannsynligvis ikke bruke flyktige (som de fleste kompilatorer vil optimalisere den bort hvis det ikke nær nok).

Ellers, som andre har sagt .. bare bruke den deretter undersøke ASM dumper for å se om kompilatoren faktisk enig med deg :)

I noen tilfeller, dvs. visse versjoner av gcc .. det er verdt sjekke disse dumper.

Svarte 11/06/2009 kl. 10:22
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more