Warum generiert das Kompilieren des C-Codes des minimalen Testfalls unter Verwendung von gcc5 (5.3.0) eine Warnung [-Wincompatible-pointer-types] für den Funktionsaufruf warning (), der ein Const-Argument hat und dieses Argument unter Verwendung von ConstMyDouble umwandelt typedef, aber nicht für den Aufruf von nowarning (), der nicht den ConstMyDouble-Cast verwendet, noch für den Aufruf von noconst (), der den nichtkonstanten typedef MyDouble verwendet, und wie kann er repariert werden?
Es scheint eine Feinheit zu geben, wenn [const] in einem typedef verwendet wird und typedef zum Darstellen von Argumenten für eine Funktion verwendet wird.
Der verwirrendste Teil ist die Warnmeldung:
%Vor%was zu sagen scheint, dass const double (*) [2] nicht dasselbe ist wie (aka) const double (*) [2]
Ich weiß, dass ich die Warnungen über die Option [-Wincompatible-pointer-type] ausschalten kann, aber dies ist ein minimaler Testfall und repräsentiert nicht das, was mir in der Praxis begegnet.
In der Praxis treten diese Warnungen only auf, weil ähnliche Typdefinitionen und Umwandlungen in einer Bibliothek, die ich verwende, vorkommen ( Ссылка ), also möchte ich wissen, wie ich das beheben kann, um den Lärm so gering zu halten, dass solche Warnungen von meinem eigenen Code kommen.
Ich verwende GCC 5.3.0; Diese Warnungen treten bei GCC 4.4.7 nicht auf.
Dies ist nur ein minimaler Testfall; Es sollte nicht darauf ankommen, dass die Funktionen noconst (), nowarning () und warning () nichts mit dem Argument tun.
Ich denke, das hängt mit Strange warning in a zusammen C Funktion const multidimensional-array argument , oder vielleicht andere, aber hier scheint das Problem mit typedef vs. nicht mit typedef in der Besetzung zu arbeiten. Dennoch, wenn dies ein Duplikat ist, entschuldige ich mich und werde es entfernen.
Es scheint einen Compiler-Bug zu geben, wie von den Kommentatoren in Ihrer Frage bestätigt, tatsächlich hat @ zowl das anscheinend überprüft Der Fehler tritt nur bei GCC 5.3.0 auf, wie erklärt in diesem Kommentar .
Der Benutzer @ liliscent hat den clang Compiler verwendet und auch keine Warnung generiert wie in dieser andere Kommentar .
Die Schlussfolgerung, dass es einen Fehler in GCC 5.3.0 gibt, scheint also gültig zu sein.
Tags und Links compilation c compiler-warnings