"math.h" nicht mit C89 kompatibel



  • Hallo!

    Ich hoffe, dass ich mit meiner Frage in dem richtigen Unterforum gelandet bin. Ansonsten bitte einfach verschieben.

    Mein Problem ist, dass ich mit dem avr-gcc Compiler gerade mein Projekt C89-kompatibel machen wollte. Als ich es jedoch probiert habe, war nicht mein Code das Problem, sondern der Code aus dem Header "math.h".

    Folgende Zeilen scheinen das Problem zu sein:

    __ATTR_CONST__ static inline int isfinite (double __x)
    

    sowie

    __ATTR_CONST__ static inline double copysign (double __x, double __y)
    

    Die Fehlermeldungen lauten:

    /usr/avr/include/math.h:359:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'double'
    

    und

    /usr/avr/include/math.h:359:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'double'
    

    Wenn ich den Code mit -std=gnu89 oder -std=c99 kompiliere, dann funktioniert alles einwandfrei. Ist __ATTR_CONST__ nicht im C89-Standard definiert oder was könnte das Problem sein? Gibt es dafür irgendwie Abhilfe?

    Ich wäre für jede Hilfe dankbar!



  • Es liegt am Schlüsselwort inline: Does ANSI-C not know the inline keyword?



  • Lohnt es sich, eine Pullrequest in avr-libc zu machen oder wird das sowieso verworfen?
    Andererseits ist es vermutlich auch egal, da, wenn es der Compiler beherrscht, man sowieso üblicherweise den neusten Standard verwendet.
    Ich wollte nur auf jeden Fall ein C89-kompatibles Projekt haben.

    Auf jeden Fall danke für die Aufklärung!



  • Solange deine eigenen Dateien C89 kompatibel sind, ist es ja i.O.
    Andere Compiler bringen ja ihre eigenen Standard-Header mit (welche dann hoffentlich mit den verschiedenen Versionen besser umgehen).



  • Ja, das war auch mein Gedankengang.

    Wobei die Auswahl an AVR-C-Compilern ja sowieso beschränkt ist.
    Und vom C-Standard wird das (zumindest meines Wissens) nicht gedeckt.

    Vielen Dank!


Anmelden zum Antworten