5

我的代码包含

#define READ_TAMPER_PIN()   {((FIO2PIN & PIN_TAMPER) >> 12) ;}

哪里PIN_TAMPER又是一个宏——

 #define PIN_TAMPER     0x00001000;

在其中一个头文件中,它在 main() 中调用,例如

x = READ_TAMPER_PIN();  

它给出一个错误说“错误:#29:期望一个表达式”

我在这里犯了什么可能的错误?

4

2 回答 2

3

宏中的大括号和分号是错误的。利用:

#define READ_TAMPER_PIN()   ((FIO2PIN & PIN_TAMPER) >> 12)
于 2013-07-20T05:09:50.133 回答
1

根据 c99 标准(§6.10.3 #10)

形式的预处理指令

# 定义标识符 lparen identifier-listopt ) 替换列表换行

# 定义标识符 lparen ... ) 替换列表换行

#define identifier lparen identifier-list , ... ) replacement-list new-line

定义一个带参数的类函数宏,在语法上类似于函数调用。参数由可选的标识符列表指定,其范围从标识符列表中的声明延伸到终止#define预处理指令的换行符。类似函数的宏名称的每个后续实例后跟一个(作为下一个预处理标记引入了预处理标记的序列,该序列被定义中的替换列表替换(宏的调用)。替换的预处理标记序列是由匹配终止预处理标记,跳过中间匹配的左右括号预处理标记对。在构成类函数宏调用的预处理标记序列中,换行符被认为是正常的空白字符。

于 2013-07-20T05:19:49.603 回答