完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
云汉达人
TM1628_init();这是一个函数,你在前面都已经声明过了,也有函数主体了,这样调用肯定不会出错,至于TM1640_init;这里你用的是宏定义,也就是相当于你在程序中用TM1640_init替代了“P31S;”而后面的“P30S;”、“P30S;”编译的时候可能就直接当做两个单独的语句了吧,你在TM1640_init后面加个分号,语法上应该也是没错的,也就相当于是“P31S;;”这样多了个分号而已吧? |
|
|
|
有幾個問題
1. #define這樣用法是沒有實質作用的,如果很想用Macro作法,改寫如下 #define TM1640_int { P31SP; P30SP; P32SP; } define用法很大隱憂就是不會檢查型別,且直接替換的方式會造成邏輯失準,所以建議只define簡單函數和數值/字串,盡量避開;分號直接使用 這樣寫法比較推薦 #define P3XSP(S,C) (BS(P3CFG0,S),BC(P3CFG0,S)) P3XSP(2,3); P3XSP(0,1); P3XSP(4,5); 2. 錯誤是因為extern用法,它會找尋同名的定義,您這個case會往上替換到BS和BC Macro,會造成語法錯誤,您可以照第1點的寫法,也不用extern了,直接用Macro即可 #define P3XSP(S,C) (BS(P3CFG0,S),BC(P3CFG0,S)) #define TM1640_int { P3XSP(2,3); P3XSP(0,1); P3XSP(4,5); } 然後在程式碼中 TM1640_int; 以上希望對您有用 |
|
|
|
这样编译直接出错,是什么情况。我上面意思是这样的,TM1628_init是打算初始化IO口模式,TM1628_init();是打算初始化功能用的。(如果我把TM1628_init改成TM1628,且把#define TM1628_init P31SP;P30SP;P32SP;改成#define TM1628 P31SP;P30SP;P32SP;编译就没有错是什么意思) |
|
|
|
是不是编译器默认把TM1628_init()和TM1628_init当成同一个意思
|
|
|
|
云汉达人
你的宏定义与函数名怎么能一样呢? 这是基础中的基础语法问题啊。 你这么写,让编译器情何以堪啊? 编译器还没有添加人工智能,人家是区分不是这个同名的宏定义与函数名的。 不仅仅是宏定义与函数名不能一样,你定义两个同名的变量都是要出错的。 |
|
|
|
只有小组成员才能发言,加入小组>>
369 浏览 0 评论
970 浏览 1 评论
2354 浏览 5 评论
2673 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2490 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
525浏览 9评论
533浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
639浏览 6评论
507浏览 5评论
550浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-13 10:18 , Processed in 0.826654 second(s), Total 87, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号