В примере от Keil uVision для макетной платы STM32 я нахожу следующую функцию:
__NO_RETURN static void thrLED(void *argument) {
...
(void)argument;
...
}
Что означает (void)argument;
?
Насколько я понимаю, «аргумент» — это указатель типа void в качестве аргумента для функции «thrLED». Но я понятия не имею, что делает линия.
Без (void)argument
вы получите предупреждающее сообщение типа «Параметр «аргумент» никогда не используется».
Операторы этой формы иногда используются, чтобы отключить предупреждения о неиспользуемых объектах от компиляторов или других инструментов проверки кода.
Если argument
не используется в функции, компилятор с включенными повышенными предупреждениями может предупредить, что параметр argument
не используется.
Оператор выражения (void) argument;
номинально использует argument
в выражении, хотя приведение к void
отбрасывает результат. Хотя компилятор может распознать, что это утверждение не имеет никакого эффекта, и предупредить об этом, эта форма выбрана, чтобы сообщить компилятору, что argument
намеренно не используется. Таким образом, компиляторы предназначены не для того, чтобы предупреждать о таких утверждениях, а для того, чтобы воспринимать их как указание на то, что предупреждения не нужны.
argument
имеет тип «указатель на пустоту», а не тип «пустота».(void)argument;
в основном для того, чтобы ворс (и тому подобное) был счастлив. По сути, это говорит им, что да, я понимаю, что этой функции был передан аргумент. Тот факт, что я им не пользуюсь, не является признаком проблемы; Я собирался сделать это.