может быть перепрофилирован для более полезных языковых функций.
ли гуру стандартов 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 ++, есть ли обходной путь?