Стандарт C не допускает пустых структур, как подсказывает сообщение об ошибке. Стандартный C ++ допускает их, поскольку они могут быть полезны в качестве мета-значений шаблонов и для разрешения перегрузки, среди других целей.
Из сообщения об ошибке кажется, что вы компилируете этот заголовок с помощью компилятора Visual Studio C.
Другие компиляторы более снисходительны. Пустые C-структуры являются давним расширением GCC и часто использовались, как в этом примере, как другая форма так называемой "struct hack" . В своей классической форме взлом структуры состоял в том, чтобы поместить массив длины 1 (или, используя gcc, длину 0) в качестве заполнителя для расширения переменной длины. В этом случае расширение переменной длины предположительно является единственным объектом неопределенного типа, в отличие от классического взлома структуры, где это массив объектов указанного типа, но неопределенной длины.
Таким образом, GCC (и Clang) принимают эту декларацию struct
как действительную C, если только вы не запрашиваете строгую проверку с помощью -pedantic
(и даже тогда она отображается как предупреждение, а не ошибка).
В общем, union
было бы лучшим решением здесь. Но для этого необходимо знать различные возможные расширения TxRequest
, поэтому может возникнуть больше проблем, чем оно того стоит.