gpt4 book ai didi

c - 这是一个普通的 Bug 还是一个聪明的预编译器 Trick?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:00 25 4
gpt4 key购买 nike

滚动浏览 http://git.suckless.org/st/plain/st.c我偶然发现

#define LEN(a) (sizeof(a) / sizeof(a)[0])

我知道预编译魔法很难,我的 C 也不是最好的

但这让我想知道最后的 parent 是否有意义 - 不应该是这样的吗

#define LEN(a) (sizeof(a) / sizeof((a)[0]))

最佳答案

当操作数是左侧表达式而不是类型时,sizeof 运算符实际上不需要括号,因此不需要第二个 sizeof 处的括号,因为这个不期望类型(因为尾随 [0])。此 LEN 宏似乎用于获取静态定义 vector 的大小。

例如:

int v[10];

LEN(v) will expand to (sizeof(v)/sizeof(v)[0])

(v)[0]v[0] 相同,所以第二个 sizeof 实际上类似于 sizeof v[0]sizeof 的有效使用(不需要括号)

一个著名的(至少在 Stack Overflow 上如此)不需要括号的 sizeof 示例是:

int *v;

v=malloc(10*sizeof *v);

获取动态定义的 10 元素 vector 。请注意,之前的 LEN 宏在这里不起作用。

关于c - 这是一个普通的 Bug 还是一个聪明的预编译器 Trick?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42001665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com