2017-02-23 4 views
-2

Ich habe eine unsigned const volatile short int*. Ich möchte, dass es (x + y) ist, was zur Zeit der Definition auf 0 gesetzt ist. Allerdings möchte ich, wenn aus irgendeinem Grund y zu 5 wechselt, möchte ich auch die unsigned const volatile short int* ändern.Wenn etwas ein const volatile int ist, kann es basierend auf dem Status einer Variablen ändern?

Wäre das in C möglich?

. (Anmerkung: Ich verwende freistehenden C99-Modus mit GNU-Erweiterungen, und ich meine, es automatisch und nicht mit einer Funktion zu ändern)

+0

Variablen in C aktualisieren ihre Werte nicht retroperspektiv: Es gibt kein Abhängigkeitssystem (im Gegensatz zu einer Tabelle). Entfernen Sie auch das "const", wenn Sie nicht wollen, dass es "const" ist. Und widerspricht "const" nicht "volatile"? –

+0

Der Zeiger ist nicht 'const' qualifiziert, also ja, es darf natürlich geändert werden. – Olaf

+0

@WeatherVane nein, Const widerspricht nicht volatilen. [Sie sind orthogonal in C] (http://stackoverflow.com/questions/4592762/difference-between-const-const-volatile). –

Antwort

1

Es gibt keine Möglichkeit, Variablen automatisch basierte Update machen von anderen Variablen wie das in C.

Statt die Summe von x und y in einer Variablen zu speichern, sollten Sie nur eine Funktion erstellen, die die Summe neu berechnet, wann immer Sie sie benötigen. Die Zugabe sollte ziemlich schnell sein:

int get_the_sum() 
{ 
    return x + y; 
} 

Alternativ könnte man bedenkt, machen x und y statische Variablen, die nur mit set-Funktionen geändert werden kann. Die Setter-Funktionen für x und y kümmern sich um die Aktualisierung von Variablen, die aktualisiert werden müssen. Es ist schwer zu sagen, ob sich dieser Ansatz lohnt, ohne mehr über Ihre Anwendung zu wissen.

void change_y(int new_y) 
{ 
    y = new_y; 
    sum = x + y; 
} 
0

sei angenommen, daß y als

erklärt wird
volatile unsigned short int y = -x; 

(oder einem Äquivalent), und dass der Wert von y von 5 anfänglich verschieden ist, kann man

unsigned const volatile short int *p = &y; 

Dieser wird definiert, erfüllen Sie die Anforderungen, wie Sie sie vorgestellt haben, obwohl es Bedingungen auferlegt, die Sie nicht angegeben haben. Zusätzlich zu den oben explizit genannten Annahmen wird davon ausgegangen, dass die Tatsache, dass Sie Änderungen in Reaktion auf Änderungen in y benötigen, aber Änderungen in Reaktion auf Änderungen in x nicht erwähnen, bedeutet, dass der angegebene Wert tatsächlich nicht darauf reagieren muss Änderungen in x.

Natürlich bin ich geneigt zu denken, dass dies überhaupt nicht repräsentiert, was Sie wirklich meinen. Das kann nicht in C implementiert werden. Zeiger verweisen auf Speicherorte, aber der Wert eines Ausdrucks wie x + y befindet sich nicht im Speicher.

Verwandte Themen