一個複雜宏定義的解讀

我們不提倡在寫代碼的時候出現太多複雜的宏定義,宏定義雖然可以簡化代碼量,但是讀起來非常費勁!下面來看一個例子:把一個buff中的數據拷貝到一個指定的數組中。由於種種原因,我們用宏定義來實現這些負責的轉化。

代碼如下:

#include "stdafx.h"
#include "string.h"
typedef unsigned char uint8_t;
#define rxbuff_cpl(src, type) (g_CanRx_buff[(ATP_can_map[src])[type]])
uint8_t g_CanRx_buff[10][8];
int a1[2] = {1,2};
int a2[2] = {3,0};
uint8_t * ATP_can_map[2]= {
 (uint8_t*)&a1,
 (uint8_t*)&a2,
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 uint8_t buff[8] = {1,2,3,4,5,6,7,8};
 uint8_t *a = ATP_can_map[1];//a的值爲3;

 memcpy(rxbuff_cpl(1,0), buff, 8);
//rxbuff_cp1(1,0)其實就是g_CanRx_buff[3][0],
//即把buff中的內容拷貝到g_CanRx_buff[3]開始的二維數組中。
 int i,j;
 for (i = 0; i < 10; i++)
 {
  printf("g_CanRx_buff[%d]: ",i);
  for (j = 0;j < 8; j++)
  {
   printf("%d ",g_CanRx_buff[i][j]);
  }
  printf("\n");
 }
 return 0;
}

運行結果如下:

 一個複雜宏定義的解讀
我們可以看到g_CanRx_buff[3]中北拷貝了buff中的數據,這個程序沒有什麼意義,只是瞭解一下複雜宏的技巧,用一些宏定義的技巧可以實現複雜的功能,但是也使程序更加隱晦難懂,這兩者之間是不可兼得的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章