Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.12.2014, 20:39

Flags setzen und verwenden

Hallo, ich habe sowas mal definiert:

C-/C++-Quelltext

1
#define FLAG(X)     (0x10000 << (X))


Nun will ich das in einer Funktion so nutzen



C-/C++-Quelltext

1
EineFunktion(FLAG(2));


Die erste, zweit und dritte If-Anweisung soll durchgeführt werden. Tut es aber nicht. Er führt nur die dritte if-Anweisung durch. Ich erkenne aber nicht wo der fehler ist. Danke!


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
EineFunktioner(int value)
{

    if(value&0x10000)
            // TU WAS

    if(value&0x20000)
        // TU WAS

    if(value&0x40000)
        // TU WAS

    if(value&0x80000)
        // TU WAS

    if(value&0x100000)
        // TU WAS

    if(value&0x200000)
        // TU WAS

    if(value&0x400000)
        // TU WAS

    if(value&0x800000)
        // TU WAS
}

2

10.12.2014, 20:46

Fehler schon entdeckt :) Sitze wohl zu lange vor dem Code.

C-/C++-Quelltext

1
EineFunktion(FLAG(0)|FLAG(1));


So geht es natürlich, aber ist nicht der Sinn der Sache. Habt ihr eine Lösung für mein Problem? Ich möchte das FLAG(x) nur einmal schreiben.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

10.12.2014, 20:46

Generell würde ich dir empfehlen für soetwas auf den Präprozessor zu verzichten.
Daraus kann man wunderbar eine Funktion machen. In C++11 sogar zur Compile Time mit "constexpr". Makros haben da eigentlich wirklich keine Berechtigung mehr.

Ich verstehe nicht warum du erwartest, dass die erste und zweite Funktion ausgeführt wird.
0x10000 zweimal nach rechts geschoben ist 0x40000. (Wie dir auch der Debugger schon gesagt haben sollte ;) )
0x40000 entspricht dann der dritten Verzweigung. (Natürlich immernoch nur ein Bit gesetzt, das wurde ja nur verschoben)

Werbeanzeige