可不可以用宏定义子函数?

来源:百度知道 编辑:UC知道 时间:2024/06/22 00:48:50
可以的话怎么定义?
#define SET_MAIN_CLOCK_SOURCE(source) \
do { \
if(source) { \
CLKCON |= 0x40; /*RC*/ \
while(!(SLEEP&0X20)); /*待稳*/ \
SLEEP |= 0x04; /*关掉不用的*/ \
} \
else { \
SLEEP &= ~0x04; /*全开*/ \
while(!(SLEEP&0X40));/*待稳*/ \
asm("NOP"); \
CLKCON &= ~0x47; /*晶振*/ \
SLEEP |= 0x04; /*关掉不用的*/ \
} \
}while (0)
#define CRYSTAL 0
#define RC 1

这是我在别的资料上面抄来的 这个是用宏定义的子函数吗?

这个宏只是用来替换程序中的一段程序代码,不是子函数。
例如:
void main()
{
int a=5;
SET_MAIN_CLOCK_SOURCE(a);
}

被替换成:
void main()
{
int a=5;
do {
if(a) {
CLKCON |= 0x40; /*RC*/ \
while(!(SLEEP&0X20)); /*待稳*/
SLEEP |= 0x04; /*关掉不用的*/
}
else {
SLEEP &= ~0x04; /*全开*/
while(!(SLEEP&0X40));/*待稳*/
asm("NOP");
CLKCON &= ~0x47; /*晶振*/
SLEEP |= 0x04; /*关掉不用的*/
}
}while (0)
}

可以定义类中的函数:
#include <iostream.h>

#define PRINT void print(){cout<<"Hello World"<<endl;}

class A
{
public:
PRINT
};

void main()
{
A a;
a.print();
}