länge von #define



  • 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 argument

    wenn 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


Anmelden zum Antworten