Software
全部博文(16)
分类: C/C++
2007-06-22 18:43:15
在C/C++语言里,Macro(宏指令)是非常有用的。
有一招数我还是从别人那里学来的。
它省列了编程者的打字工作。
完全的使用了编译器的强大功能来简化我们的工作。
而且也使原码易读简洁也方便使用。
例如有一个自定的函数是如下:
WORD inp_chkbit(int card_no,int port_no, IODATA_TYPE bit);
这是一个读取输入埠里其中一个bit的函数。(1 byte=8 bits, 1 word=16 bits)
可以如此的应用,
if (inp_chkbit(0, 0x240, 0x01)) //if input bit ON
{
..... //Do something
}
但是如此的编程,相信很难理解 0,0x240,0x01是代表了什么。
尤其当这个函数大量的使用时,输入(input bit)众多时,是相当难懂的。
即使你有超强的记忆力也难把所有的I/O都记住。
如果又把代码交给他人去帮你除虫,那么他一定会吐血而死的,呵...
我最初的做法就是把这些数字用文字来带表而已。
例如:
#define CARD_0 0
#define CARD_1 1
....
#define PORTA 0x240
#define PORTB 0x241
#define PORTC 0x242
....
#define INPUT_1 0x01
#define INPUT_2 0x02
#define INPUT_3 0x04
#define INPUT_4 0x08
....
if (inp_chkbit(CARD_0, PORTA, INPUT_1)) //if input bit ON
{
..... //Do something
}
这虽然是易读了许多,但是在编程上往往会很容易弄错port_no和card_no的。
如果这个机器里有百多两百个I/O,要确定所有的参数都是正确的使用,还蛮麻烦的。
多年以前,我在跟进别人的程序时,看到了一个很高明的做法。
于是我就将它在我的程序里“发扬光大”了!呵...
例子:
#define INPUT_1 CARD_0, PORTA, 0x01
#define INPUT_2 CARD_0, PORTA, 0x02
#define INPUT_3 CARD_0, PORTA, 0x04
#define INPUT_4 CARD_0, PORTA, 0x08
....
if (inp_chkbit(INPUT_1)) //if input bit ON
{
..... //Do something
}
如以上的代码,真的就非常容易读了,也不会弄错它的参数。
他以一个label来代替了三个参数,真的很高明。
以前还真的没去想过如此的用法呢!
真有一语惊醒梦中人的感觉,呵...
这真可说是C/C++的艺术哦!
所以说C/C++是一级棒的!呵...