Решено: GCC: type of bit-field ‘supported’ is a GCC extension

Модератор: Модераторы разделов

IMB
Сообщения: 2565
ОС: Debian

Решено: GCC: type of bit-field ‘supported’ is a GCC extension

Сообщение IMB »

Доброго дня!
Есть некая структура со следующими элементами:

Код: Выделить всё

unsigned char    supported : 3;
unsigned char    current : 3;
unsigned char    dummy : 2;

Параметры компиляции -Wall -Wextra -Werror -pedantic -std=c99, компилятор gcc version 4.4.5 (Debian 4.4.5-8).
При компиляции появляются сообщения о ошибке:

Код: Выделить всё

inc/libgige_server_str.h:22: error: type of bit-field ‘supported’ is a GCC extension
inc/libgige_server_str.h:26: error: type of bit-field ‘current’ is a GCC extension
inc/libgige_server_str.h:27: error: type of bit-field ‘dummy’ is a GCC extension

Поиск в сети выводит только на сообщения о проблеме при упакованной структуре (http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html), но я не пакую данную структуру.
Как бы решить эту проблему?
Спасибо.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: GCC: type of bit-field ‘supported’ is a GCC extension

Сообщение sash-kan »

IMB писал(а):
09.03.2012 12:00
Как бы решить эту проблему?
а в чём, собственно, проблема?
в том, что warning превращается в error?
так вы сами это указали опцией werror·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Решено: GCC: type of bit-field ‘supported’ is a GCC extension

Сообщение IMB »

Как то это некрасиво. Пока решил отказом от битовых полей, но в результате во всех функциях присваивания значений надо проверять "ширину" вводимых значений.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5372
ОС: Gentoo

Re: Решено: GCC: type of bit-field ‘supported’ is a GCC extension

Сообщение /dev/random »

Спецификация c99 разрешает указывать ширину только для типов int, unsigned int и bool. Указание ширины для других типов - это нестандартная возможность gcc. Вы передали параметр --std=c99, он заставляет gcc проверять соответствие программы стандарту. Ваша программа ему не соответствует (указывает ширину для unsigned char), и gcc выдаёт об этом предупреждение. Опция -Werror заставляет его заменять любые предупреждения на ошибки. Вот и всё.
Спасибо сказали: