ataudio 发表于 2017-6-16 16:46:23

用L073做项目,请教一个HAL库中宏定义应用方式的问题

stm32l073xx.h中有定义中断函数:
#defineLPUART1_IRQHandler   RNG_LPUART1_IRQHandler
......
#defineAES_RNGLPUART1_IRQHandler   RNG_LPUART1_IRQHandler
......

并且在stm32l0xx_it.c中,定义了函数AES_RNGLPUART1_IRQHandler(){}


按照预编译原理分析,A 用 B替换, C用B替换,是不是说明调用A,执行是按照C执行的呢?
如果这样,上面的define等同于#define A B,#define   BC,原文中这种换位置的定义的意义何在?


如果不是上面这种理解,
那么调用 AES_RNGLPUART1_IRQHandler()时,到底使用的是哪个函数?是自己的定义过程,还是RNG_LPUART1_IRQHandler过程(没有发现实现过程)。如是后者,AES_RNGLPUART1_IRQHandler()实现过程是不是多余了?




以前没见过这种定义方式,想确认一下,有没有网友在其他地方遇到过?


moyanming2013 发表于 2017-6-16 17:50:20

你这么写:
#defineAES_RNGLPUART1_IRQHandler   RNG_LPUART1_IRQHandler
只是定义了个符号,遇到AES_RNGLPUART1_IRQHandler会用RNG_LPUART1_IRQHandler替换掉。
如果一些函数没有加weak修饰,而你又重复定义的话,应该会提示重复定义error吧。

xuguomin 发表于 2017-6-17 08:36:17

不同的名称体现不同的属性,主要是帮助理解容易记忆

ataudio 发表于 2017-6-19 10:04:31

moyanming2013 发表于 2017-6-16 17:50
你这么写:

只是定义了个符号,遇到AES_RNGLPUART1_IRQHandler会用RNG_LPUART1_IRQHandler替换掉。


一般来说,会更习惯用
#define A B
#define C B
...
然后定义函数:
B()
{
}

而文件中的
#defineAB
#defineCB
..
函数:
C()
{
}

预编译本意是替换,替换后的结果,还是要定义函数B了。
页: [1]
查看完整版本: 用L073做项目,请教一个HAL库中宏定义应用方式的问题