如何在CC-RL编译的ASM文件中用逻辑或判断多#ifdef条件?
CC-RL汇编条件编译问题解决思路与示例
问题原因分析
CC-RL编译器的预处理器对#if逻辑表达式的支持可能存在兼容性限制,或者汇编器会误判条件分支中的符号为重复定义,导致else分支编译报错。
解决方法与示例
方法1:使用嵌套#ifdef/#elif替代逻辑或
这种写法兼容性更强,避免依赖#if的逻辑运算符支持:
#ifdef TYPE00_SOFT_Z1A CNLT_CNFG .EQU 0x01 FCC_CNLT_DATA .EQU 0xFC #elif defined(TYPE01_SOFT_Z2A) CNLT_CNFG .EQU 0x01 FCC_CNLT_DATA .EQU 0xFC #else CNLT_CNFG .EQU 0x00 FCC_CNLT_DATA .EQU 0xFD #endif
方法2:预清除符号避免重复定义报错
部分汇编器会忽略条件分支的互斥性,认为符号被多次定义,可在定义前用#undef清除符号:
#undef CNLT_CNFG #undef FCC_CNLT_DATA #if defined(TYPE00_SOFT_Z1A) || defined(TYPE01_SOFT_Z2A) CNLT_CNFG .EQU 0x01 FCC_CNLT_DATA .EQU 0xFC #else CNLT_CNFG .EQU 0x00 FCC_CNLT_DATA .EQU 0xFD #endif
额外检查项
- 确认CC-RL编译器文档中
defined()宏的语法要求,部分版本可能要求宏名与括号间无空格 - 确保逻辑运算符
||前后有空格,避免编译器识别错误
内容的提问来源于stack exchange,提问作者Amirtha
相关产品推荐
相关产品推荐

