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

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

AVR c语言优秀编程风格

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

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


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



强者为尊,弱者,死无葬身之地

回复评论 (5)

引用: 宏定义主要用于两个地方:

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

#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位整数关键字       */
二是利用宏定义方便的进行硬件接口操作,再程序需要修改时,只需要修改宏定义即可,而不需要满篇去找命令行,进行修改。
强者为尊,弱者,死无葬身之地
点赞  2018-9-12 00:10
在他的帖子中段,有这么一段内容。

我这里,着重说

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

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

不清楚,也不是重点。

我的重点其实只有一点:

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

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

也有定义个 u8 U8之类的。
强者为尊,弱者,死无葬身之地
点赞  2018-9-12 00:15
还是带个钩子吧,欢迎说说你的看法。
当然还是那句话,就上一层楼说的这些事情。
我本人,当年也都曾一一干过。

不过,最终我现在坚持使用 stdint.h罢了。
强者为尊,弱者,死无葬身之地
点赞  2018-9-12 00:16
1) 使用系统带的,有一个好处,如果别人恰好也是用的是系统的,特别是STM32的例程,一般都是用是系统带的(stdint.h文件中定义的),那么在移植你程序时,整个工程的变量定义看起来就比较通一
2) 使用自己定义的好处的,自己定义的,肯定是自己方便记忆的名称,所以写起来会得心就手,不怕调用错
3) 在公司内部,无论是用系统的,还是自己定义的,建议建立统一的标准,一方面移植方便,二来公司的代码不光是给自己看的,也是给接手的同事阅读的
4) 关于用#define  还是用 typedef  网上讨论的贴子一大堆,这里就不赘述了
5) 好吧,先啰嗦这么多吧
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-9-12 08:23
#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 都是指针
点赞  2018-10-22 17:31
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复