Вы можете использовать неиспользуемый атрибут 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;