社区导航

 

搜索
查看: 1504|回复: 5

[原创] 【旧帖浮沉 之三】自定义u8,uint8_t?

[复制链接]

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

发表于 2018-9-12 00:09 | 显示全部楼层 |阅读模式
很意外,上一个帖子,其实我浏览完它的内容,发现它表达的内容多且乱,与我上一个帖子想起来的东西关系不太大。
不过,不要紧,引出话题而已,然而,这个帖子,说来也挺好玩。
它的标题是

AVR c语言优秀编程风格

然而,恰恰,在我自己的观点看来,这篇文章,绝大多数看法,反而应该说是,不够“优秀”。
或者说,他已经注意到了一些问题,但是,他抛弃了一些更加好的做法。

或者说,在这个帖子要说的问题里,我认为他是 舍近求远。


此内容由EEWORLD论坛网友辛昕原创,如需转载或用于商业用途需征得作者同意并注明出处



来源:EEWorld 编程基础板块,转载请附上链接

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2018-9-12 00:10 | 显示全部楼层
宏定义主要用于两个地方:

一是用得非常多的命令或语句,利用宏将其简化。

#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef NULL
#define NULL 0
#endif
#define MIN(a,b)         ((a #define MAX(a,b)         ((a>b)?(a):(b))
#define ABS(x)         ((x>)?(x):(-x))
typedef unsigned char uint8;                       /* 定义可移植的无符号8位整数关键字         */
typedef signed   char int8;                         /* 定义可移植的有符号8位整数关键字         */
typedef unsigned int   uint16;                       /* 定义可移植的无符号16位整数关键字       */
typedef signed   int   int16;                       /* 定义可移植的有符号16位整数关键字       */
typedef unsigned long uint32;                       /* 定义可移植的无符号32位整数关键字       */
typedef signed   long int32;                       /* 定义可移植的有符号32位整数关键字       */
二是利用宏定义方便的进行硬件接口操作,再程序需要修改时,只需要修改宏定义即可,而不需要满篇去找命令行,进行修改。

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2018-9-12 00:15 | 显示全部楼层
在他的帖子中段,有这么一段内容。

我这里,着重说

重定义 数据类型那一块。
也就是他说的  定义可移植的整数关键字  这一部分。

这里,我不去纠结那些细节,什么这是重定义不是宏啊。
或者什么,这是数据类型,不是关键字什么的(事实上,数据类型也可以说是关键字?)

不清楚,也不是重点。

我的重点其实只有一点:

为什么那么多人不喜欢 #include ?
然后直接使用 uint8_t uint16_t int32_t

我见过,自己也都干过。
有自己 typedef uint8_t的,或者更次点,写成 #define uint8_t的。

也有定义个 u8 U8之类的。

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2018-9-12 00:16 | 显示全部楼层
还是带个钩子吧,欢迎说说你的看法。
当然还是那句话,就上一层楼说的这些事情。
我本人,当年也都曾一一干过。

不过,最终我现在坚持使用 stdint.h罢了。

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

1355

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-9-12 08:23 | 显示全部楼层
1) 使用系统带的,有一个好处,如果别人恰好也是用的是系统的,特别是STM32的例程,一般都是用是系统带的(stdint.h文件中定义的),那么在移植你程序时,整个工程的变量定义看起来就比较通一
2) 使用自己定义的好处的,自己定义的,肯定是自己方便记忆的名称,所以写起来会得心就手,不怕调用错
3) 在公司内部,无论是用系统的,还是自己定义的,建议建立统一的标准,一方面移植方便,二来公司的代码不光是给自己看的,也是给接手的同事阅读的
4) 关于用#define  还是用 typedef  网上讨论的贴子一大堆,这里就不赘述了
5) 好吧,先啰嗦这么多吧
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void

回复

使用道具 举报

139

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2018-10-22 17:31 | 显示全部楼层
#define是简单文本替换,复杂类型定义时容易隐藏一些错误;typedef是数据类型的别名,适用于复杂类型定义。
例如程序员想定义两个 unsigned char 型指针
#define uint8_pt      unsigned char*
uint8_pt   pVal1, pVal2;          //pVal2 不是指针

typedef unsigned char*    uint8_pt
uint8_pt   pVal3, pVal4;          //pVal3, pVal4 都是指针

评分

1

查看全部评分


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-10-15 06:55 , Processed in 0.192870 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表