硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5138|回复: 5
收起左侧

[有问必答] 感觉串口宏定义可能存在一个隐患

[复制链接]

38

主题

82

回帖

196

积分

初级会员

积分
196
发表于 2016-3-26 11:34:04 | 显示全部楼层 |阅读模式
#define USARTx                           USART2
这句话是为了实现移植或者更改port的方便, 本身的逻辑没任何问题.
但是, 库函数里面会经常用USARTx这个名称作为临时变量, 那么, 会不会有这样的隐患: 早在编译的时期, 系统就把临时变量直接展开成宏了?
我也是无意中定位USARTx时MDK弹出了很多个para的对象, 当然有一个是macro. (理论上应该不会造成影响, 但始终觉得是个隐患)
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2016-3-26 11:42:08 | 显示全部楼层
在宏定义之后经常会使用到串口的库函数, 经常会用到USARTx, 这个要是被宏展开那就麻烦了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2016-3-26 23:37:46 | 显示全部楼层
不太理解楼主的意思。
ps : #define是预处理命令,在程序编译前就会全部替换。
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2016-3-27 01:28:40 | 显示全部楼层

回 eric2013 的帖子

eric2013:不太理解楼主的意思。
ps : #define是预处理命令,在程序编译前就会全部替换。
 (2016-03-26 23:37) 
对 那么就是define之后的所有UASRTx都会被替换, 那么里面是否含有一些其实是同名的局部变量呢? 这些局部变量不就被替换成宏了么
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2016-3-27 10:14:42 | 显示全部楼层
官网也从不用USARTx这种宏定义的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2016-3-27 10:32:45 | 显示全部楼层
明白楼主的意思了,这个不用纠结,自己设计的程序自己注意下即可,一般规范的变量命名方式基本不存在同名问题。
全局变量, 宏定义,静态全局变量,局部变量,形参都有自己的命名格式。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:12 , Processed in 0.039349 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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