Forum: Compiler & IDEs C Programmiersprache?


von Dirk (Gast)


Lesenswert?

Sind Ausdrücke wie
1
unsigned char *MQReadPtr = ::MQReadPtr;
in C nicht erlaubt?

Dabei ist MQReadPtr als unsigned char* global definiert.

Ich beabsichtige hiermit eine Variable gleichen Namens innerhalb einer 
Funktion anzulegen (die orginal Variable zu überdecken) und ihr dann 
mittels Scope Resolution Operator (::) den Wert der übergeordneten 
Variable zuzuweisen. In C++ ist das eigentlich ok. Ist das auch in C 
erlaubt?

von Sven P. (Gast)


Lesenswert?

C kennt keine expliziten Scopes (sprich: Klassen, Namensräume), und 
demnach auch keinen ::-Operator.

von Gast (Gast)


Lesenswert?

C -> imperative Programmiersprache
C++ -> objektorientierte Programmiersprache

Die Arten mögen sich untereinander nicht unbedingt.

von Rolf Magnus (Gast)


Lesenswert?

> Sind Ausdrücke wie
> unsigned char *MQReadPtr = ::MQReadPtr;
> in C nicht erlaubt?

Nein.

> Ich beabsichtige hiermit eine Variable gleichen Namens innerhalb
> einer Funktion anzulegen (die orginal Variable zu überdecken)

Um den Leser deines Code zu verwirren?

von Dirk (Gast)


Lesenswert?

> Um den Leser deines Code zu verwirren?
Ich würde das Ganz ja auch ordentlich in einem Makro verstecken, dann 
merkt der Leser das auch nicht.

Das ganze soll dazu dienen den Code zu optimieren. Ich übergebe einen 
Pointer auf einen Datenpuffer an eine Funktion. Die Funktion bracht 
diesen Pointer nur, um den Puffer zu lesen. Hierzu wird die Variable 
inkrementiert. Da die Variable nach dem Funktionsaufruf keine Bedeutung 
mehr hat, möchte ich dem Compiler die Möglichkeit geben die Variable 
einmalig zu lesen und danach in den CPU internen Registern zu halten, 
ohne daß diese Register man Ende wieder in den Speicher 
zurückgeschrieben werden müssen.
Also: Werte lesen, damit arbeiten (als Pointer) und Ergebnis 
anschließend verwerfen, da der Pointer ja nur zum Lesen benutzt wurde.
Wie, wenn nicht so, sagt man sowas einem Compiler sonst?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Überleg dir einfach nen anderen Bezeichner. ZB komplett in 
Kleinbuchstaben.

von Dirk (Gast)


Lesenswert?

> Überleg dir einfach nen anderen Bezeichner. ZB komplett in
> Kleinbuchstaben.
Dann müsste ich aber die bereits vorhandenen Makros umschreiben.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Dann mach inline-Funktionen aus den Makros oder bastel im Makro andere 
Namen zusammen oder hacke was (is ja eh schon Hack ;-)) in der Richtung:
1
int * x;
2
3
void foo()
4
{
5
    typeof(x) i = x;
6
    {
7
        typeof(i) x = i;
8
        *x++ = 0;
9
        ...
10
    }
11
}

von Gast (Gast)


Lesenswert?

>Dann müsste ich aber die bereits vorhandenen Makros umschreiben.

Dann hast du was zutun. Oder kennst du nur sowenig Worte, dass du die 
öfter verwenden musst?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.