c - 在 linux 内核 2.6.26 中,我找到了 "#define atomic_read(v) ((v)->counter + 0)",为什么是 "+0"?

标签 c linux

我在 linux-2.6.26 (linux-2.6.26/include/asm-alpha/atomic.h) 中找到了这个,但不知道为什么在这里 +0。

#define atomic_read(v)      ((v)->counter + 0)
#define atomic64_read(v)    ((v)->counter + 0)

最佳答案

如果未使用 + 0,它将是一个您可能会意外分配给它的左值,即

if (atomic_read(v) = 42) {
    ...
}

会“工作”...而不是 + 0 你可以只使用一元 +,即

(+(v)->counter)

但是 + 0 在一般情况下比 +一个 好的优势:+ 要求参数是算术类型 - 但指针不是算术类型。然而 + 0 对指针同样有效(并且仅对于指针,您可以使用 &* 将左值转换为表达式的值;这保证对 null 也有效指针)

关于c - 在 linux 内核 2.6.26 中,我找到了 "#define atomic_read(v) ((v)->counter + 0)",为什么是 "+0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824614/

相关文章:

c - ARM 交叉编译 GLib 2.33.10,链接器错误

c# - 安装程序如何将文件合并为可执行文件?

java - Linux 托管服务器中上传图片路径 (Java)

对结构数组感到困惑并在 C 中调整大小

c - 以附加模式打开文件 : using open() API

python - 如何使用python在linux中创建用户

linux - 启动 Jenkins 时它正在启动但是当检查 Jenkins 的状态时它说事件(退出)

linux - 由于 glibc 版本,基于 Qt 的应用程序二进制兼容性问题

c - 在 c 中使用 glib 中的 glist 时释放内存会在调用函数时出现内存读/写错误

c++ - 矩阵比较算法