Я получаю следующее сообщение об ошибке
error: '0' cannot be used as a function
при попытке скомпилировать следующую строку:
NOOP(0 != width);
NOOP определяется следующим образом:
#define NOOP (void)0
Исходный код является частью SDK — так что все должно быть в порядке. И я узнал, что (void)0
на самом деле это правильный способ описать «без операции» в C ++. Но почему вы хотите передать булев параметр в функцию, которая ничего не делает? А как избавиться от сообщения об ошибке?
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 ++ продолжает игнорировать.