首先是宏定义。此处有几点要注意:
所有宏的代码要么都在一行之内,要么每行后面加换行符"\"
#pragma once
extern char* g_ptr;
#define STREAM_GET_BYTE(b) { \
* g_ptr = (b); \
++g_ptr; \
}
int macro_test();
宏的引用。此处要注意:宏在编译前被插入到原码中,从反汇编来看,每一行都是同样的反汇编,而跟函数不同。
#include <stdio.h>
#include "macro.h"
char gstring[256] = "hello\r\nhow are you?\r\nfine thank u,and u?\r\ni'm fine 2";
char* g_ptr = gstring;
int macro_test() {
printf("\r\nfirst chance:%s\r\n", gstring);
const char* data = "what is your name?";
// for (int i = 0;i < lstrlenA(data);i ++)
// {
// STREAM_GET_BYTE(data[i]);
// }
STREAM_GET_BYTE(data[0]);
STREAM_GET_BYTE(data[1]);
STREAM_GET_BYTE(data[2]);
STREAM_GET_BYTE(data[3]);
STREAM_GET_BYTE(data[4]);
STREAM_GET_BYTE(data[5]);
printf("\r\n\r\nsecond chance:%s\r\n", gstring);
return true;
}
下图为宏的反汇编: