使用場合:拼接兩個宏,一個是傳入的宏。可是傳入的宏不會被替換,反而原封不動的接了上去,這就尷尬了。通過各類嘗試,竟然成了,特此記錄分享一下,方便你們學習。學習
char A_param=0;.net
char B_pramm=0;blog
//添加宏定義原理
#define OBJECT A
#define DEFINE_(X) X##_param //一次定義
#define DEFINE(X) DEFINE_(X) //再次定義
#define PARAM DEFINE(OBJECT)分享
void fun()
{ps
// DEFINE_(OBJECT)=100; 這個操做是拒絕的,它就是直接拼接不被替換void
DEFINE(OBJECT)=100; //這個操做就神了,先替換再拼接,咱們只是作了二次定義,解決一切煩惱文章
PARAM=100;//這樣也是能夠的
}
那最終是否是達到你的目的呢,實質的原理大概就是替換與拼接的前後順序,我沒有細細研究了。
下面是個人一個使用場合。
#define STEP_TIMx 4//TIM4
#define STEP_CHx 2//CH2
#define SET_STEP42_PPS_1(NUM,X) TIM##NUM->PSC=((X))
#define SET_STEP42_PPS_2(NUM,X) SET_STEP42_PPS_1(NUM,X)
#define SET_STEP42_PPS(X) SET_STEP42_PPS_2(STEP_TIMx,X)