318 Star 2.1K Fork 1K

OpenHarmony / kernel_liteos_a

 / 详情

无意义define?

已完成
缺陷
创建于  
2020-09-11 13:55

该问题是怎么引起的?

kernel/include/los_typedef.h L90-L91

#define VOID               void
#define STATIC             static

为什么要宏定义?直接使用voidstatic不是更好吗?

(望大佬指教)

评论 (6)

方而静 创建了缺陷
展开全部操作日志

这东西,实践中,总要把一些标准基础类型定义为自己的类型。也可能是为了保持格式的统一。总之只有设计者才知道。

类比:int8_t,int16_t,int32_t,int64_t uint8_t,uint16_t,uint32_t,uint64_t

有些老的编译器不支持部分关键字,或者芯片厂商提供的适用于特定芯片的编译器不支持。
单纯的 define 实际上毫无意义,或者为了方便后续支持扩展。
看设计人员的意图吧,如果他想支持这些编译器,那还算有意义,否则就是不知道从哪里抄来的无意义代码。

有些老的编译器不支持部分关键字,或者芯片厂商提供的适用于特定芯片的编译器不支持。
单纯的 define 实际上毫无意义,或者为了方便后续支持扩展。
看设计人员的意图吧,如果他想支持这些编译器,那还算有意义,否则就是不知道从哪里抄来的无意义代码。

@sanfusu 个人见过的最奇葩的是那种不支持 switch case 语句的 C 编译器(是某芯片厂商提供的 8 位机上的编译器)

主要是为了支持不同芯片厂商的编译器,方便扩展。当前只用了arm平台和llvm,这里确实没有特别的意义了。但是从整体项目的命名和延续性,该定义会继续保留。

估计只有作者才知道是什么原因吧,不过我觉得这个是看起来与INT, INT32, UINT32, LONG之类的风格上保持一致了,估计早期代码这么定义风格的,就一直延续下来了。另一方面就像前面几位回答的,可以灵活定义它们的值进行其它目的的需要,比如将STATIC定义成空的话就可以对原先static的方法进行函数级的单元测试了

方便不同的芯片厂的编译器扩展吧

kenneth 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(6)
1238473 sanfusu 1614001189 7989137 caoruihong 1601432415 8117860 easy egg 1601018540 1777142 szdytom 1578959666
C
1
https://gitee.com/openharmony/kernel_liteos_a.git
git@gitee.com:openharmony/kernel_liteos_a.git
openharmony
kernel_liteos_a
kernel_liteos_a

搜索帮助