我在 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/