初级会员
- 积分
- 197
- 金钱
- 197
- 注册时间
- 2016-1-28
- 在线时间
- 37 小时
|
1金钱
本帖最后由 yibiejiangtian 于 2016-1-29 00:00 编辑
看战舰V3视频中系统时钟初始化这一节,讲到void SystemInit (void)中的条件编译,关于下面这段程序:
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
原子哥讲的是编译#else下面这句,大容量定义的是STM32F10X_HD,也就是没定义STM32F10X_CL,查寄存器发现原子哥讲的应该是没错的,但是网上的资料全部都是这样讲的:
#ifndef x //先测试x是否被宏定义过
程序段1 //如果x没有被宏定义过,那么就编译程序段1
#endif
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。
这种说法刚好和原子哥视频中说的相反,到底哪种解释是正确的?还有下面这种说法应该是正确的吧:
#ifdef 标识符
程序段1
#else
程序段2
#endif
上述语句作用是当标识符已经被定义过,则对程序段1进行编译,否则编译程序段2
|
最佳答案
查看完整内容[请看2#楼]
两个都对!一个是ifdef一个是ifndef
楼主看看这个 http://c.biancheng.net/cpp/html/68.html
|