Поместите макросы в библиотеку или преобразуйте их в функции?

#c #embedded

Вопрос:

Я делал некоторые макросы в классе, потому что этому меня научил мой профессор, но для реальных проектов нам говорят создать библиотеку, чтобы облегчить нашу жизнь. Могу ли я вставить туда макросы? Или мне следует преобразовать их в функции? если да, то не мог бы кто-нибудь помочь мне с преобразованием одного из них, потому что я немного запутался в типах возвращаемых данных и так далее.

 #define BV(bit) (1 << (bit))
#define setBit(byte, mask) (byte |= (mask))
#define clearBit(byte, mask) (byte amp;= ~(mask))
 

Комментарии:

1. Мне кажется, что setBit(byte, mask) это вернуло бы byte А. Прототипом может быть: byte setBit(byte value, byte mask); Поскольку это, похоже, домашнее задание, я оставлю остальное вам.

2. Макросы принадлежат заголовочным файлам. Таким образом, у вас может быть специальный файл заголовка, который их содержит. Функции, с другой стороны, могут входить в предварительно скомпилированную библиотеку.

Ответ №1:

Вы должны удалить эти макросы и вообще не использовать их.

Код, такой как byte |= 1u << 3 наиболее читаемая форма. Все программисты на языке Си сразу понимают, что делает код. Если у вас возникли проблемы с чтением/пониманием побитовых операторов, то макросы не являются решением этой проблемы.

Такой код setBit(byte, BV(3)) совершенно нечитаем. Чтобы понять это, программист на языке Си должен сначала изучить ваш секретный макроязык. Их не следует заставлять учить этот язык, когда они уже знают С.

Ответ №2:

Вы можете преобразовать их во встроенные функции и поместить в файл заголовка, или вы можете оставить их в виде макросов и поместить в файл заголовка.

В любом случае у вас будет только файл заголовка, и вы можете включить его из нескольких разных исходных файлов.

Я бы не рекомендовал помещать такие простые вещи, как это, в библиотеку, которая компилируется отдельно.