LINUX.ORG.RU

Передача битового поля как аргумент функции

 , ,


0

2

Предположим, есть структура с битовым полем:

struct example {
    unsigned bit_field:1;
    /* тут много других полей структуры */
};

Далее хочется описать функцию, которая:

  1. Возвращает код успеха;
  2. Первым аргументом принимает адрес битового поля как параметр-переменную;
  3. Вторым аргументом принимает какую-нибудь большую структуру, исходя из её значений меняется значение битового поля.

Пример обращения к этой функции:

struct example ex;
int rc;
rc = func(&ex.bit_field, &big_struct);

Как должно выглядеть объявление функции func?



Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от BruteForce

Оффтоп: а зачем такая хотелка?

В теории, я могу представить где мне это может быть удобным. А так, пока чистое любопытство.

Оффтом2: а может максрос?..

Может. А какой?

Jullyfish
() автор топика

ANSI C, 3.3.3.2:

The operand of the unary & operator shall be either a function designator or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.

Rootlexx ★★★★★
()

Чтобы говорить об адресе битового поля к обычному адресу нужно добавить ещё три бита, чтобы была адресация именно битов.

Но я сильно сомневаюсь, что оно вам так надо. Тем более вместо одного бита вы будете передавать таким образом уже 67 бит на 64-хбитном процессоре.

unDEFER ★★★★★
()

в процессоре z80 есть битавая адресация, в х86 нет операции or, and и операции сдвига shl, shr в помощь, если нужно для сжатия данных используй перечесляймые типы, если нужно именно битовое хранение сочиняй свои функции работы с битами

s-warus ★★★★★
()
Последнее исправление: s-warus (всего исправлений: 2)

делай union, пакуй туда кусками не больше 64 бит и передавай как uint64

ckotctvo
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария