может быть перепрофилирован для более полезных языковых функций.

ли гуру стандартов C ++ просветить меня?

С какой версии стандарта C ++ этот оператор потерпел неудачу, потому что(v) кажется эквивалентным(*&v)?

То есть например код:

 #define DEC(V) ( ((V)>0)? ((V)-=1) : 0 )
 ...{...
        register int v=1;
        int r = DEC(v) ;
 ...}...

Это теперь производит предупреждения под-std=c++17 лайк:

не может получить адрес переменной регистра

левая сторона операнда должна быть lvalue

Многие C-макросы заключают ВСЕ макропараметры в круглые скобки, из которых вышеприведенное предназначено только в качестве репрезентативного примера.

Фактические макросы, которые выдают предупреждения, например,RTA_* макросы в/usr/include/linux/rtnetlink.h.

Если не использовать / переопределять эти макросы в C ++, есть ли обходной путь?

Ответы на вопрос(3)

Ваш ответ на вопрос