Technisch ist dies nicht einmal gültig C.
TrayMan ein wenig war in seiner Analyse aus, ja 6.2.6.1 sagt:
Except for bit-fields, objects are composed of contiguous sequences of one or more bytes, the number, order, and encoding of which are either explicitly specified or implementation-defined.
aber das Krawatte mit 6.2.5-20, die sagt:
— A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an incomplete array), each of which has an optionally specified name and possibly distinct type.
und jetzt können Sie schlussfolgern, dass Strukturen werden ein oder mehrere Bytes sein weil sie können nicht leer sein. Der Code gibt Ihnen eine Warnung, während der gleiche Code tatsächlich scheitern auf Microsoft Visual Studio mit einem Fehler zu kompilieren:
error C2016: C requires that a struct or union has at least one member
So die kurze Antwort ist nein, es ist kein tragbarer Weg ist, zu vermeiden, diese Warnung, weil sie Ihnen sagt, dass Sie die C-Standards verletzen. Sie müssen eine Compiler-spezifische Erweiterung verwenden, um es zu unterdrücken.
Warum brauchen Sie die Größe auf Null? –
Weil ich eine private Schnittstelle habe (in der ich meine Struktur von null Größe habe, weil ich keine bestimmte Funktionalität implementiere) und eine Ã-ffentliche Schnittstelle, wo einige meiner privaten Strukturen undurchsichtig werden und nur die gleiche Größe wie private haben müssen. – claf
Mein Build-System überprüft die private Strukturgröße und erstellt die öffentliche Struktur mit einem "char _opaque [SIZEOF_PRIVATE_STRUCT]". – claf