乙個複雜巨集定義的解讀

2021-09-30 12:19:04 字數 982 閱讀 1064

我們不提倡在寫**的時候出現太多複雜的巨集定義,巨集定義雖然可以簡化**量,但是讀起來非常費勁!下面來看乙個例子:把乙個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] = ;

int a2[2] = ;

uint8_t * atp_can_map[2]= ;

int _tmain(int argc, _tchar* ar**)

; 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("\n");

} return 0;

}

執行結果如下:

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

乙個巨集定義的用法

巨集定義就是簡單的替換,之前沒見過帶符號的替換,看到這個有點懵了,記錄如下。這裡用 n,代替 fninfo n,l 用的很巧妙。define fninfo n,l n,measvalue measfntbl 以下為names.h中內容 fninfo dominmaxmidhilo,min fninf...

乙個巨集定義引發的問題

問題1 對與buffer巨集定義的理解 一些得到的基本結論 int型資料占有乙個字的空間,char型資料占有乙個位元組的空間,並且char資料型別的定義是為ascii字元表量身定製的 對與buffer的理解 define buffer char int far 0x200 首先,複習對與基本巨集定義...

c 用巨集定義乙個函式

要點 變數都用括號括起來,防止出錯,結尾不需要 在實際程式設計中,不推薦把複雜的函式使用巨集,不容易除錯。多行用 要寫好c語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以...