Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用符号| \u0026\u0026〜和〜在capability.h文件中大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

给出了 here,我正在读取一个文件capability.h 我不清楚如何符号| 〜&和&〜用于函数调用它们正在做什么 使用|在以下函数调用中: static inline kernel_cap_t cap_combine(const kernel_cap_t a, const kernel_cap_t 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语法分析器仅在预处理器完成时获取它并使其看起来像后一个表达式.

大佬总结

以上是大佬教程为你收集整理的使用符号| \u0026\u0026〜和〜在capability.h文件中全部内容,希望文章能够帮你解决使用符号| \u0026\u0026〜和〜在capability.h文件中所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。