使用符号| \u0026\u0026?和?在capability.h文件中
发布时间:2020-12-13 23:56:12 所属栏目:Linux 来源:网络整理
导读:给出了 here,我正在读取一个文件capability.h 我不清楚如何符号| ?和?用于函数调用它们正在做什么 使用|在以下函数调用中: static inline kernel_cap_t cap_combine(const kernel_cap_t a,const kernel_cap_t b){ kernel_cap_t dest; CAP_BOP_ALL(dest,a,b,
给出了
here,我正在读取一个文件capability.h
我不清楚如何符号| ?&和&?用于函数调用它们正在做什么 使用|在以下函数调用中: static inline kernel_cap_t cap_combine(const kernel_cap_t a,const kernel_cap_t b) { kernel_cap_t dest; CAP_BOP_ALL(dest,a,b,|); return dest; } 使用&在以下系统调用中: static inline kernel_cap_t cap_intersect(const kernel_cap_t a,&); return dest; } 在以下功能中使用&?: static inline kernel_cap_t cap_drop(const kernel_cap_t a,const kernel_cap_t drop) { kernel_cap_t dest; CAP_BOP_ALL(dest,drop,&~); return dest; } 在以下功能中使用?: static inline kernel_cap_t cap_invert(const kernel_cap_t c) { kernel_cap_t dest; CAP_UOP_ALL(dest,c,~); return dest; } 解决方法
例如,CAP_BOP_ALL定义为
#define CAP_BOP_ALL(c,OP) do { unsigned __capi; CAP_FOR_EACH_U32(__capi) { c.cap[__capi] = a.cap[__capi] OP b.cap[__capi]; } } while (0) 所以“表达” CAP_BOP_ALL(dest,|); 扩展到 do { unsigned __capi; for (__capi = 0; __capi < _KERNEL_CAPABILITY_U32S; ++__capi) { dest.cap[__capi] = a.cap[__capi] | b.cap[__capi]; } } while (0); .尽管原始表达式看起来不像正确的C,但这是因为C语法分析器仅在预处理器完成时获取它并使其看起来像后一个表达式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |