zhc 发表于 2017-10-19 16:02:07

关于Preprocessor symbol的疑问

我用的处理器是STM32F107VCT6
在stm32f10x.h文件中看到如下内容:
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
/* #define STM32F10X_LD */   /*!< STM32F10X_LD: STM32 Low density devices */
/* #define STM32F10X_LD_VL *//*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
/* #define STM32F10X_MD */   /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_MD_VL *//*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */
/* #define STM32F10X_HD */   /*!< STM32F10X_HD: STM32 High density devices */
/* #define STM32F10X_HD_VL *//*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */   /*!< STM32F10X_XL: STM32 XL-density devices */
/* #define STM32F10X_CL */   /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif
/*Tip: To avoid modifying this file each time you need to switch between these
      devices, you can define the device in your toolchain compiler preprocessor.

按照Tip的描述,在Preprocessor symbol中添加了STM32F10X_CL
工程编译没有问题,但是发现把STM32F10X_CL去掉,编译也没有问题

按照stm32f10x.h中的描述,编译应该会抱错啊
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
#endif


请问为什么在Preprocessor symbol中不添加STM32F10X_CL也不会抱错呢?

yu0405jie 发表于 2017-12-19 09:46:30

你确定哪里都没加吗?比如开发环境的参数设置里?

anobodykey 发表于 2017-12-19 09:47:07

因为mdk可能会有一个默认的宏定义,你可以看下C/C++选项中Compiler control string中是否有一个宏定义

无薪税绵 发表于 2017-12-19 11:51:41

看清楚,它们之间是(&&)与关系的。

maxtch 发表于 2017-12-19 12:16:20

很有可能这个设置是在 SVD 文件里面的,你选择设备之后 MDK 就自动从 SVD 文件里面读取了这个符号。

harvardx 发表于 2017-12-19 20:42:30

注意前面有个!
页: [1]
查看完整版本: 关于Preprocessor symbol的疑问