c - 这个 C 宏主体中的三重点是如何工作的?

标签 c gcc macros

我从未在宏中遇到过...。这个宏应该做什么?它计算成员从类型开始的偏移量,然后它计算从类型开始到成员字段末尾的偏移量。但是,这两个值是如何结合起来的呢?

#define bpf_ctx_range(TYPE, MEMBER)                     \
offsetof(TYPE, MEMBER) ... offsetofend(TYPE, MEMBER) - 1

最佳答案

它不会计算任何东西。它用于 case-range GCC 的扩展,这样你就可以写:

switch (byte_offset) {
case bpf_ctx_range(foo_struct, bar_member):
     // do something...
     break;
}

找出 offset 处的字节属于哪个成员。

关于c - 这个 C 宏主体中的三重点是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905757/

相关文章:

c - Flex 和 Bison,Windows 使用符号表时出错

c - c中的固定长度字符串数组

c++ - vc9 和 gcc 之间不同的析构函数行为

linux - 使用 gcc 时找不到版本 `GLIBC_2.11'

c - 宏表达式不可赋值

C++ 是否可以使用宏从调用它的地方打印类函数?

c - 将数据发送到连接在我的服务器上的多个客户端

c - 为什么函数中的非静态变量被初始化为 0 以及为什么它变成静态的?

c - 将大型 const 结构传递给函数

c - 设置 MACRO 的范围