Die IAR Embedded C-Compiler ist mit diesem glücklich, und ich nahm an, es richtig C-Code war:In C, sollte ich Zeiger auf Arrays von unvollständigen Typen verwenden dürfen?
struct incomplete;
typedef struct incomplete (*why_not)[2];
struct incomplete {struct incomplete *known_to_work;} array[2];
why_not ok = &array;
jedoch gcc und Klirren Drossel auf die Definition von why_not
: es
incomplete.c:2:29: error: array type has incomplete element type ‘struct incomplete’
typedef struct incomplete (*why_not)[2];
^
Technisch ist kein Grund, eine Definition eines "pointer to array of incomplete" -Typs abzulehnen. Schließlich wird die Strukturdefinition nur benötigt, wenn eine solche Variable dereferenziert wird oder eine Zeigerarithmetik ausgeführt wird.
Ich bin bestrebt, Strukturdefinitionen wo möglich zu verbergen.
Was sagt der C-Standard dazu?
Sie können einen Typ "Array von unvollständigen Typ" in keinem Fall verwenden (sogar Funktionsparameter) –
@ M.M Eigentlich, warum nicht? –
Fehlerbericht an IAR senden. Mist wie das ist der Grund, warum ich ihren Compiler nicht verwende. Sie haben den Mut zu verlangen, dass Sie ihnen Geld zahlen, um Fixes für ihre Non-Compliance-Bugs zu erhalten. Dies ist besonders peinlich, da dieser Teil von C seit den 1980er Jahren dort ist. – Lundin