最近无所事事,看STM32的库玩,包括USB的库。
并不是想拿来说事,只是给大家一个提醒,关于C语言的严谨性。
#define _SetEPAddress(bEpNum,bAddr) _SetENDPOINT(bEpNum, _GetENDPOINT(bEpNum) & EPREG_MASK | bAddr)
这个代码有什么问题吗?发现还不止这一个地方。
第一点建议:别拿优先级开玩笑,即使你非常清楚,倒背如流 第二点建议:宏定义的参数,绝对不要忘了加(),世界比你想象的复杂 第三点建议:尽量确保在所有支持的编译器上0警告,即使在最高的警告级别下。
修改: #define _SetEPAddress(bEpNum,bAddr) _SetENDPOINT((bEpNum), (_GetENDPOINT(bEpNum) & EPREG_MASK) | (bAddr)) |