相关疑难解决方法(0)

(v)实际上是(*&v),因为什么时候?

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++中使用/重新定义这些宏,是否有任何解决方法?

c++ c++11 c++14 c++17

17
推荐指数
3
解决办法
3559
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

c++17 ×1