#define ... warum falsches Ergebnis mit Konstanter als Nenner



  • #define BYTES_FOR_XYZ 2*sizeof(double)+sizeof(float)
    ...
    int main()
    {
    int t = 80/BYTES_FOR_XYZ;
    int tB = BYTES_FOR_XYZ;
    int test = 80/tB;
    }
    

    So: warum bekomme ich für t = 24 das falsche
    und erst für test = 4 das richtige ergebnis???
    Dürfen #define-Konstanten nicht im Nenner stehen???



  • ga_un schrieb:

    Dürfen #define-Konstanten nicht im Nenner stehen???

    Es gibt keine #define-Konstanten, es gibt nur Makros. Der Präprozessor ersetzt jedes Vorkommen eines Makros durch seine Definition. Dh deine erste Zeile sähe nach dem Präprozessorlauf so aus:

    int t = 80/2*sizeof(double)+sizeof(float);
    

    Ich hoffe es ist dir jetzt klar, was du tun musst.



  • Und es gibt noch einen Hinwies. Es waere besser,wenn du den Compiler dem Präprozessor vorziehen würdest:

    const size_t BYTES_FOR_XYZ = 2*sizeof(double)+sizeof(float);
    

    So wird das Symbol dem Compiler bekannt und ausserdem brauchst du nicht aufzupassen um sicherzustellen, dass das Macro korrekt geklammert ist.


Anmelden zum Antworten