Вы можете использовать неиспользуемый атрибут gcc / clang, однако я использую эти макросы в заголовке, чтобы избежать специфических атрибутов gcc по всему источнику, а также наличие __attribute__
везде немного многословно / безобразно.
#ifdef __GNUC__
# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
# define UNUSED(x) UNUSED_ ## x
#endif
#ifdef __GNUC__
# define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
# define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif
Тогда вы можете сделать ...
void foo(int UNUSED(bar)) { ... }
Я предпочитаю это, потому что вы получаете ошибку, если вы пытаетесь использовать bar
в коде где-либо, поэтому вы не можете оставить атрибут по ошибке.
и для функций ...
static void UNUSED_FUNCTION(foo)(int bar) { ... }
Примечание 1):
Насколько я знаю, MSVC не имеет эквивалента __attribute__((__unused__))
.
Примечание 2):
Макрос UNUSED
не будет работать для аргументов, которые содержат круглые скобки,
, поэтому, если у вас есть аргумент, такой как float (*coords)[3]
, вы не можете сделать,
float UNUSED((*coords)[3])
или float (*UNUSED(coords))[3]
, Это единственный недостаток макроса UNUSED
, который я нашел до сих пор, в этих случаях я возвращаюсь к (void)coords;