länge von #define
-
hallo
wie lang darf den so ein define sein?wie variablennamen max 32 oder beliebig lang? was passiert wenn nur die stellen 35-40 sich unterscheiden?
danke
-
Warum liest du dies nicht einfach in der Doku des Precompilers nach?
Mal abgesehen davon... wozu zum Geier brauchst du solche defines?
Da sag ich nur viel Spaß beim Debuggen...
-
Der Standard sieht keine Längenbeschränkung vor. Das bedeutet nicht, das alle existieren Compiler bzw. Präprozessoren da ohne Beschrenkung sind. Letztliche Sicherheit gibt also nur die jeweilige Doku oder ein Test. Aber 30-40 ist wohl eher noch nicht problematisch (Lesbarkeiten mal aussen vor).
-
Mathias schrieb:
wozu zum Geier brauchst du solche defines?
Da sag ich nur viel Spaß beim Debuggen...Ich brauche die, da ich darin z.b. reinbringe in welcher klassie die vorkommen und noch unterscheide nach welcher sorte dann noch der name selbst
D.H. 12-18 gehen da schon mal flötenPS: was hat das mit dem debugger zu tun? wer damit umgehen kann, der hat auch kein Problem damit

-
fragenstellender schrieb:
PS: was hat das mit dem debugger zu tun? wer damit umgehen kann, der hat auch kein Problem damit

Dann verwechsle mal ein paar von deinen 40 zeichen #defines (die sich auch nur inder 32. bis 35. stelle unterscheiden ) und versuche beim debuggen draufzukommen wo der Fehler liegt. Viel Spass.
Kurt
-
1. in dem defines werden nur texte für den kunden angezeigt
2. "verwechseln" ist immer dumm. Egal ob 35-40 stelle oder ich ein ganz anderes falsches nehme. das ist also kein argumentwenn in der messagebox der falsche text angezeigt wird, wird der falsche text angezeigt. ob von einem langen makro ( wo nur letze stellen sich unterscheiden ) oder ein kurzes!
-
warum denn defines? nimm doch einfach const char* oder strings.
Konstanten mit defines fetzulegen ist eine C-Unart die in C++ eigentlich nicht mehr verwendet werden braucht und auf verschiedene Art zu Problemen führen kann...
-
pumuckl schrieb:
warum denn defines? nimm doch einfach const char* oder strings.
Konstanten mit defines fetzulegen ist eine C-Unart die in C++ eigentlich nicht mehr verwendet werden braucht und auf verschiedene Art zu Problemen führen kann...naja const char* ist sehr unklug wenn du in 5 sprachen lokalisieren musst
sowas find ich leichter
#define ABC_CLASSXYZ_FEHLENDEKDN_ERROR "123"
dann in einem .txt file
123=Sie haben vergessen die Kundennummer einzutragen
das kann man z.b. in english dann so einsetzen
123=YOU forgot ....
im code macht man dann
...GetMessageString(ABC_CLASSXYZ_FEHLENDEKDN_ERROR)...
Welche Möglichkeiten gibt es da noch? oder ist die von mir schon ziemlich gut?
PS: auf einem server werden die sprachen eingetragen und beim download gibt man die sprache an und erhält die richtige .txt datei
-
Hi,
ich benutze für sowas meistens einen message_server. Das ist im prinzip ein wrapper um ne map. Beim program start kümmert der sich um das laden der richtigen messages und man kann dann während des programlaufs wie mit einer map arbeiten. Die selectoren definiere ich als member eines enums.
Ne andere möglichkeit wäre natürlich das ganze wirklich über defines zu machen und einfach verschiedensprachige builds zu erstellen. Dann kann mans allerdings während der laufzeit nicht mehr ändern.
-
wo ist der Unterschied zu
const char * ABC_CLASSXYZ_FEHLENDEKDN_ERROR = "123" ; .... GetMessageString(ABC_CLASSXYZ_FEHLENDEKDN_ERROR)IMHO kein Grund #defines zu verwenden.
Kurt
-
und auf verschiedene Art zu Problemen führen kann...
wow echt? z.b.
also wenn es einen guten grund gibt, dann denke ich beim nächsten mal dran
-
@ZuK
Der Unterschied liegt darin, dass bei #define der Text jedesmal in den Sourcecode eingefügt wird, während beim Pointer nur die Adresse weiter gereicht wird.
#defines sind daher besonders bei vielen Texten zu empfehlen und bei größeren Programmen da man jedesmal das komplette Programm übersetzen muss, damit die Texte überall aktuell sind...
-
Mathias schrieb:
@ZuK
Der Unterschied liegt darin, dass bei #define der Text jedesmal in den Sourcecode eingefügt wird, während beim Pointer nur die Adresse weiter gereicht wird.
#defines sind daher besonders bei vielen Texten zu empfehlen und bei größeren Programmen da man jedesmal das komplette Programm übersetzen muss, damit die Texte überall aktuell sind...kann es auch sein dass beim
const *char ( global angelegt ) es sein kann das einige compiler da speicher reservieren???
-
@fragenstellender
Für const char * wird er einen Zeiger anlegen, da der Zeiger nicht konstant ist, sondern nur die Zeichen auf die er verweist.
const char * const sichert ihm erst zu, dass der Zeiger nicht verändert wird und somit nicht als Variable gehalten werden muss.
-
Mathias schrieb:
@ZuK
Der Unterschied liegt darin, dass bei #define der Text jedesmal in den Sourcecode eingefügt wird, während beim Pointer nur die Adresse weiter gereicht wird.
#defines sind daher besonders bei vielen Texten zu empfehlen und bei größeren Programmen da man jedesmal das komplette Programm übersetzen muss, damit die Texte überall aktuell sind...Meine Frage nach dem Unterschied bezug sich auf die Aussage
fragenstellender schrieb:
naja const char* ist sehr unklug wenn du in 5 sprachen lokalisieren musst
sowas find ich leichter
#define ABC_CLASSXYZ_FEHLENDEKDN_ERROR "123"
dann in einem .txt file
123=Sie haben vergessen die Kundennummer einzutragen
das kann man z.b. in english dann so einsetzen
123=YOU forgot ....
im code macht man dann
...GetMessageString(ABC_CLASSXYZ_FEHLENDEKDN_ERROR)...
Und da machen const char * IMHO nicht mehr Arbeit.
Kurt