Передача параметров в неиспользуемый макрос в C++
Я получаю следующее сообщение об ошибке
error: '0' cannot be used as a function
при попытке скомпилировать следующую строку:
NOOP(0 != width);
NOOP определяется следующим образом:
#define NOOP (void)0
Исходный код является частью SDK - так что все должно быть в порядке. И я узнал, что (void)0
на самом деле это правильный способ описать "без операции" в C++. Но почему вы хотите передать логический параметр функции, которая ничего не делает? А как избавиться от сообщения об ошибке?
2 ответа
MACRO не определен с какими-либо параметрами, поэтому после того, как препроцессор заменит код, этот оператор будет выглядеть так:
(void)0(0 != width);
Что сбивает с толку компилятора, заставляя его думать, что вы пытаетесь использовать оператор "()" в 0. (то есть, используя 0 в качестве функции)
Я рекомендую вам опустить "(0!= Width)" (это вводит в заблуждение) и просто написать NOOP;
"(void)0(0!=width);
msgstr "недопустим C++, поэтому это не нормально. (void)0;
сам по себе ничего не делает в C++, поэтому может быть использован как noop. Вместо вашего текущего определения я бы использовал:
#define NOOP(X) (void)0
Это говорит препроцессору C++, что есть функция препроцессора, называемая NOOP
который принимает один параметр любого типа и заменяет весь вызов функции (void)0
, Так что, если у вас есть строка кода, которая говорит NOOP("HELLO WORLD")
то препроцессор заменяет всю эту (void)0
, который компилятор C++ продолжает игнорировать.