使用keil5编译stm32,头文件core_cmFunc.h中,是预定义__CC_ARM,还是__GNUC__?
如题,在core_cmFunc.h文件中,#ifdefined(__CC_ARM)...#elifdefined(__GNUC__)...其中,__disable_irq...
如题,在core_cmFunc.h文件中,
#if defined ( __CC_ARM )
...
#elif defined ( __GNUC__ )
...
其中,__disable_irq();是定义在( __GNUC__ )下的,为什么用keil编译时,调用不会出现问题? 展开
#if defined ( __CC_ARM )
...
#elif defined ( __GNUC__ )
...
其中,__disable_irq();是定义在( __GNUC__ )下的,为什么用keil编译时,调用不会出现问题? 展开
2个回答
展开全部
编译的时候,可能是那个地方定义了__CC_ARM, 预编译指令执行了#if defined ( __CC_ARM )下面的代码,没有执行#elif defined ( __GNUC__ )下面的代码;
#if ...
...
#elif ..
...
是条件预编译,只执行其中的一个分支
#if ...
...
#elif ..
...
是条件预编译,只执行其中的一个分支
追问
只执行一个分支是对的,问题是keil自带时armcc编译器,但是调用的是gcc下的函数。
追答
#if .. #elif是预编译指令,就是说在正式编译之前进行一遍,把没有用的分支代码忽略了,正式编译时,只编译__CC_ARM分支的代码,其它分支的代码没有参与编译,当然也不会出错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询