我的代码包含
#define READ_TAMPER_PIN() {((FIO2PIN & PIN_TAMPER) >> 12) ;}
哪里PIN_TAMPER
又是一个宏——
#define PIN_TAMPER 0x00001000;
在其中一个头文件中,它在 main() 中调用,例如
x = READ_TAMPER_PIN();
它给出一个错误说“错误:#29:期望一个表达式”
我在这里犯了什么可能的错误?
宏中的大括号和分号是错误的。利用:
#define READ_TAMPER_PIN() ((FIO2PIN & PIN_TAMPER) >> 12)
根据 c99 标准(§6.10.3 #10)
形式的预处理指令
# 定义标识符 lparen identifier-listopt ) 替换列表换行
# 定义标识符 lparen ... ) 替换列表换行
#define identifier lparen identifier-list , ... ) replacement-list new-line
定义一个带参数的类函数宏,在语法上类似于函数调用。参数由可选的标识符列表指定,其范围从标识符列表中的声明延伸到终止#define预处理指令的换行符。类似函数的宏名称的每个后续实例后跟一个(作为下一个预处理标记引入了预处理标记的序列,该序列被定义中的替换列表替换(宏的调用)。替换的预处理标记序列是由匹配终止)预处理标记,跳过中间匹配的左右括号预处理标记对。在构成类函数宏调用的预处理标记序列中,换行符被认为是正常的空白字符。