Мне нужно написать макрос, который работает на bitarray и выглядит следующим образом:
array[0] = number of bits in bitarray (integer)
array[1..n] = bits
Макрос должен выглядеть следующим образом:
GetBit(pointer, index)
Macro *must* return 0,1 or call function similar to exit().
Это моя (рабочая) версия со встроенными функциямимакроса, который я должен написать:
static inline unsigned long GetBit(BitArray_t array, unsigned long index)
{
if ((index) >= array[0])
exit(EXIT_FAILURE);
else
return (GetBit_wo_boundary_checks(array,index));
}
Вот что у меня есть:
#define GetBit(array,index)\
(((index) < array[0] || exit(EXIT_FAILURE)) ?\
GetBit_wo_boundary_checks(array,index) : 0)
Моя проблема в том, что этот должен сделатьпроверка границы индекса (i
Я подумал, что можно обойти эту проблему, поместив выход в оцененное короткое замыканиеусловие, но я получаю: «недопустимое использование выражения void» .
Есть ли способ сделать этот макрос прозрачно выходным (), когда индекс превышает максимум, определенный в массиве [0]