C++标准专家可以赐教我:
由于哪个C++标准版本有这个语句失败,因为(v)似乎相当于(*&v)?
即代码:
#define DEC(V) ( ((V)>0)? ((V)-=1) : 0 )
...{...
register int v=1;
int r = DEC(v) ;
...}...
Run Code Online (Sandbox Code Playgroud)
这现在产生如下警告-std=c++17:
不能取寄存器变量的地址
操作数的左侧必须是左值
许多C宏将括号中的所有宏参数括起来,其中上述仅仅是代表性示例.
产生警告的实际宏是例如中的RTA_*宏/usr/include/linux/rtnetlink.h.
如果没有在C++中使用/重新定义这些宏,是否有任何解决方法?