Есть макрос, очищающий бит в числе по позиции начиная с наиболее значимого бита:
#define CLEAR_BIT_MSB(num, bit) ((num) &= ~(1 << ((sizeof(num) * 8) - 1 - (bit))))
Пытаюсь использовать его так:
CLEAR_BIT_MSB(bitmap[byte_offset], bit_offset);
Но сталкиваюсь с предупреждением от GCC:
error: conversion from 'int' to 'uint8_t' {aka 'unsigned char'} may change value [-Werror=conversion]
9 | #define CLEAR_BIT_MSB(num, bit) ((num) &= ~(1 << ((sizeof(num) * 8) - 1 - (bit))))
| ^
bitmap это массив значений типа uint8_t.
Как исправить это предупреждение? Я не хочу в самом макросе прописывать uint8_t, хочу использовать его для любых типов не сталкиваясь с предупреждениями.