Что такое "__maybe_unused"?
При взгляде на ядро Linux я заметил строку:
static void *malloc(size_t size) __maybe_unused;
в Linux v3.2/arch/frv/kernel/gdb_stub.c. Я никогда раньше не видел __maybe_unused
. Является ли это специфическим для ядра Linux? Или это определено в спецификации C? И что именно он делает?
Ответы
Ответ 1
В include/linux/compiler-gcc.h
есть определение макроса __maybe_unused
:
#define __maybe_unused __attribute__((unused))
и в gcc
у вас есть документация атрибута unused
для функций:
unused "Этот атрибут, прикрепленный к функции, означает, что функция должна быть, возможно, не использована. GCC не будет вызывать предупреждение для этой функции."
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
и для переменных:
unused "Этот атрибут, привязанный к переменной, означает, что переменная должна быть, возможно, не использована. GCC не выдаст предупреждение для этой переменной."
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html
Ответ 2
Из commit, который ввел атрибут:
__ maybe_unused определяется как __attribute __ ((не используется)) для обеих функций и переменным использованием, если его можно было бы отменить из-за оценка макросов препроцессора. Прототипы функций должны быть отмечены с __maybe_unused, если фактическое определение функции зависит на макросах препроцессора.