今天在网上看一篇MiniGUI入口函数的讲解,原文地址,其中讲到了用宏进行的替换,看了一下,没打看明白,后来在同事“编程小王子”的解释下,明白了其中的技巧。
先贴简化版的实例代码:
// 宏定义部分
#define MiniGUIMain \
MiniGUIAppMain (int args, const char* argv[]); \
int main (int args,const char* argv[]) \
{ \
int iRet = 0; \
printf("haha,args is %d.\n",args);\
iRet = MiniGUIAppMain (args,argv); \
return iRet; \
} \
int MiniGUIAppMain
// 调用部分
int MiniGUIMain(int argc, const char* argv[]){
printf("[ha111111111111]\n");
return 0;
}
具体展开:
调用部分的”MiniGUIMain
“用上面的一个大的宏定义进行替换,其中调用部分”int MiniGUIMain(int argc, const char* argv[])
“的前半块”int MiniGUIMain
“在宏定义的前面结合,效果就是声明了一个函数MiniGUIAppMain
以及对main函数的调用,”(int argc, const char* argv[])
“部分在宏定义的后面结合,也就是“int MiniGUIAppMain”后面,效果就是实现了对前面声明函数“int MiniGUIAppMain (int args, const char* argv[]);
”的函数定义。
完全展开效果就是:
int MiniGUIAppMain(int args, const char *argv[]);
int main(int args, const char *argv[])
{
int iRet = 0;
printf("haha,args is %d.\n", args);
iRet = MiniGUIAppMain(args, argv);
return iRet;
}
int MiniGUIAppMain(int argc, const char *argv[])
{
printf("[ha111111111111]\n");
return 0;
}
这个地方理解的关键就是调用部分,分开和宏定义结合,参数及之后部分是放在宏定义的后面进行结合的