Технически это даже не верно C.
TrayMan был немного не в своем анализе, да, 6.2.6.1 говорит:
За исключением битовых полей, объекты состоят из смежных последовательностей из одного или нескольких байтов, число, порядок и кодирование которых либо явно определены, либо определены реализацией.
но свяжите это с 6.2.5-20, которое гласит:
- тип структуры описывает последовательно распределенный непустой набор объектов-членов (и, при определенных обстоятельствах, неполный массив), каждый из которых имеет необязательно указанное имя и, возможно отличный тип.
и теперь вы можете заключить, что структуры будут иметь один или несколько байтов , поскольку они не могут быть пустыми. Ваш код предупреждает вас, хотя тот же код на самом деле не сможет скомпилировать в Microsoft Visual Studio с ошибкой:
ошибка C2016: C требует, чтобы структура или объединение имели хотя бы одного члена
Таким образом, короткий ответ - нет, нет портативного способа избежать этого предупреждения, потому что он говорит вам, что вы нарушаете стандарты Си. Вам нужно будет использовать специфичное для компилятора расширение, чтобы подавить его.