GCC Inkompatibler Zeigertyp, der typedef verwendet

8

Ich habe einen Code, der unter GCC 4.8.4 gut zusammengestellt wurde. Ich habe kürzlich mein System aktualisiert und habe jetzt GCC 5.2.1, und ich bekomme eine Warnung über inkompatible Zeigertypen. Ich habe das Problem zu einem kleinen Beispiel extrahiert, das den Fehler reproduziert:

%Vor%

Im reellen Code befinden sich der typedef, die Funktionsdefinition und der Typcast in einer Bibliothek außerhalb meiner Kontrolle, ansonsten würde ich einfach den Cast und die Funktion anpassen. Hier ist die Nachricht, die ich vom Compiler bekomme:

%Vor%

Die Notiz von gcc ist besonders beunruhigend, da sie zu zugeben scheint, dass die beiden Typen identisch sind, aber sie beschwert sich trotzdem.

    
Gravatite 27.10.2015, 19:04
quelle

2 Antworten

2

Der Konsens hier und anderswo scheint zu sein, dass der GCC mit const und typedef etwas Unerwartetes tut. Ich weiß nicht, dass Unerwartetes notwendigerweise mit einem Fehler gleichzusetzen ist, aber das müssen die GCC-Entwickler bestimmen.

Ich habe mein Kompilierungsproblem gelöst, indem ich ein Makro für den Funktionsaufruf definiert habe, der die nicht passende Typumwandlung in der Bibliothek behebt. Im Allgemeinen mag ich es nicht, an Bibliothekseinbauten zu basteln, aber das Makro erlaubt mir, den eigentlichen Bibliothekskopf nicht zu berühren und in meinem eigenen Code zu definieren, wo er für die Zukunft kommentiert werden kann, und die Testabdeckung dieses Codes sollte ein vernünftiges Frühwarnsignal sein Die zugrunde liegende Bibliothek ändert sich so, dass das Makro etwas kaputt macht.

Dies ist nicht so sehr "gelöst" als "abgearbeitet", aber jede weitere Einsicht wird wahrscheinlich von den GCC-Entwicklern kommen müssen.

    
Gravatite 10.11.2015, 19:37
quelle
1

Wenn Sie cast 'a' als ConstSpiceDouble eingeben, macht GCC etwas Unerwartetes mit const und typedef, wodurch der Typ schließlich zu 'const const double' wird. Dies können Sie in der Fehlermeldung "const ConstSpiceDouble" sehen, was "const const double" entspricht, das funktioniert nicht.

Lösung ist entweder zu sagen 'a' ist const double oder zu sagen 'a' ist ConstSpiceDouble, bevor Sie 'a' auf die foo-Funktion setzen

%Vor%

Das 'vor' ausstehende 'const' scheint ein neues Feature in den neuesten Versionen von gcc zu sein, aber davon bin ich nicht sicher: (

    
hewi 10.11.2015 19:11
quelle

Tags und Links