Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

C/C++: #define, gut oder schlecht?

d-oli / 2 Antworten / Flachansicht Nickles

Hallo

In verschiedenen C/C++- Fachbüchern habe ich gelesen, es sollen möglichst keine "magic numbers" verwendet werden.

Beispiel:
// schlecht?
toggleButton tglBtn[ 6 ];
// gut?
#define NUM_OF_TGL 6;
toggleButton tglBtn[ NUM_OF_TGL];
// besser?
const int numOfTgl = 6;
toggleButton tglBtn[ tglBtn ];
// Am besten?
typdef enum lengthDefs{
   eBtn = 8,
   eTgl = 6,
   etc.
} lengthDefs;
toggleButton tglBtn[ lengthDefs::eTgl ];

Ich arbeite zur Zeit an einer C/C++- Applikation, die Motif als grafische Bibliothek und OCI als Anbindung an eine Oracle- Datenbank verwendet. Die Applikation wurde bereits erfolgreich von HPUX nach Red Hat Linux portiert. Verwendet wird ein GNU- Compiler der 3er- Reihe.
Eines der Probleme ist, dass die Applikation voll von "magic numbers" ist.

Beispiel:
// xyz.h
...
toggleButton tglBtn[ 6 ];

// xyz.C

for( i = 0; i    new toggleButton( theWidget, this, tglBtn[ i ], … );


Was ich schlecht daran finde ist, dass ich im Header und in der C- Datei Anpassungen vornehmen muss um einen "Toggle Button" einzufügen.

Wie kann es besser gemacht werden. Ich dachte an "defines". Es soll aber Probleme geben können, betreffend Symboltabellengrösse des Compilers oder betreffend sinnlosen "Cross Dependencies". Ist da was dran?
Welche Lösung (define, const, enum) findet ihr am besten? Eure Meinungen würden mich interessieren.

Vielen Dank.
Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
d-oli thomas woelfer „grundsaetzlich ist es immer besser symbolische namen statt fest kodierten...“
Optionen

Danke für deine Anregungen.

Grüsse, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen