我在OS源代码文件中找到了以下C代码。这3行位于三个不同的源文件中。为什么我们在最后一行有两次“ EventMaskType”?即使我从第三行中删除了第一次出现的“ EventMaskType”,它也会提供相同的输出。

typedef unsigned long uint64_t;
typedef uint64_t        EventMaskType;
#define EVENT_MASK_OsEvent1  EventMaskType((EventMaskType)1u<<1)

最佳答案

typedef unsigned long uint64_t;
typedef uint64_t        EventMaskType;
#define EVENT_MASK_OsEvent1  EventMaskType((EventMaskType)1u<<1)


第一行定义类型unsigned long,也将在名称uint64_t下知道该类型。正如评论中指出的那样,这应该是标准标头stdint.h的一部分。

第二行将EventMaskType定义为uint64_t类型的别名(因此可传递地称为unsigned long的别名)。

第三行为预处理器定义了一个符号宏,因此每次(跟随)令牌EVENT_MASK_OsEvent1出现时,都将替换为EventMaskType((EventMaskType)1u<<1)

依次是值“ 1u”(unsigned int),该值使用“经典C样式强制转换”强制转换为类型EventMaskType(即unsigned long)的值,因此也可以代替强制转换写1ul)。然后将此值向左移动一位(结果2ul),最后使用功能样式强制转换为EventMaskType ...

EventMaskType( /* ... */)


...不会更改任何内容,因为它已经属于该类型。

关于c - 为什么在最后一行有两次“EventMaskType”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36321759/

10-10 22:48