noop — передача параметров в неиспользуемый макрос в переполнении стека

Я получаю следующее сообщение об ошибке

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;

5

Другие решения

«(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 ++ продолжает игнорировать.

4

По вопросам рекламы [email protected]