cruiser0129a 发表于 2019-12-25 11:32:29

#define宏定义的疑惑

#define Hang_00_L GPIO_WriteLow(Hang_00_PORT,Hang_00_PIN)
#define LED1_L GPIO_WriteLow(LED1_PORT,LED1_PIN);
书本上描述#define宏定义不能以分号结束,但第二行#define 确实以分号结束也是正确,请大神指点迷津,谢谢!

流水源 发表于 2019-12-25 11:49:51

可以分号结束的。宏定义很强大的。

不能的应该是程序里面用到宏定义的地方不能有分号。
例如:if(宏定义表达式){}    //此时括号内宏定义不能有分号

toofree 发表于 2019-12-25 11:51:52

#define,按正常套路,的确是不能以分号结束的。
万一以分号结束,语法检查有时也不为错,但使用时需要注意。
#define 在编译的时候做了宏替换,见到LED1_L的内容,直接替换为“GPIO_WriteLow(LED1_PORT,LED1_PIN);”,具体是否有影响,你把后面的内容,手动替换到程序中出现过LED1_L的内容,就可以看出来。

阳光-2042582 发表于 2019-12-25 13:37:01

谁说的不可以用分号结束,书上说的未必是对的,多看看C语言标准

cruiser0129a 发表于 2019-12-25 13:43:57

toofree 发表于 2019-12-25 11:51
#define,按正常套路,的确是不能以分号结束的。
万一以分号结束,语法检查有时也不为错,但使用时需要注意 ...

谢谢!

cruiser0129a 发表于 2019-12-25 13:44:21

流水源 发表于 2019-12-25 11:49
可以分号结束的。宏定义很强大的。

不能的应该是程序里面用到宏定义的地方不能有分号。


谢谢!
页: [1]
查看完整版本: #define宏定义的疑惑