Ani*_*rya 0 c macros sizeof c-preprocessor
我在书中的某个地方看到了这个复杂的sizeof运算符声明,这让我很开心:
#define SIZEOF(int) (int)&((int *)0)[1]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个宣言,这里发生了什么......?
这是[1]
"扩展"部分:
(int)(&(*(((int*)0) + 1)))
Run Code Online (Sandbox Code Playgroud)
现在你看看它是如何工作的?
sizeof
int
由于指针算法的属性,0将增加,最终的int
强制转换将获得结果地址的值,即'size'.
虽然它是完全未定义的行为(对null的算术以及可能是无效指针的取消引用),但是相当没有意义.
使用宏参数进行更新没有多大意义.最终演员应该是std::uintptr_t
.