如何自动在main函数 里初始化

发布时间:2015-08-03 15:42:17

main函数里自动初始化库函数

SUNNY.MAN

如果你自己写了一个函数库并封装成了lib准备以后留给自己或同事使用,但你发现有一些必须的变量必须初始化,并且在使用之后还需要释放。你会怎么办?在.h里注明:使用前调用Initvar()并且在程序退出时要调用destroyvar()。是一个解决方法,但不是最好的解决方法。写了一个检查内存是否泄露的函数,会自动打印是否内存泄露(在文档GCC中也自动检测是否内存泄露)我做了两个宏#define malloc mymalloc和#define free myfree这样只要你使用malloc和free我就会记录你的空间释放情况。但我两个问题,为了避免多线程使用时出现问题我用了pthread_mutex_t这需要初始化,并且退出时需要释放。而且统计的结果需要显示。我于是定义了三个函数:

1. initvar()

2. destroyvar()

3. int lookmemsize();

我好想我的代码能够向VS一样,能够自动执行,并且在最后打印是否泄露。怎么办呢。我终于想出了一个方法。

1.首先看一个例子main.c里有下列代码

int myfun(int a)

{

return a+10;

}

Int main(void)

{

myfun(1,3);

return 0;

}

这将会出现一个错误。

2.我们稍稍改动一下main.c里如下

extern int myfun(int a,int b);

Int main(void)

{

myfun(1,3);

return 0;

}

在另一个文件function.c

int myfun(int a)

{

return a+10;

}

这将不会错。

讲这个有会么用呢,往下看你就明白了。利用这个性质和一个特殊的宏定义,便可以实现我们的一些必须的初始化工作。

#define main(...) main_1_user(__VA_ARGS__)

这是一个宏,把用户定义的main函数变成main_1_user

int main_1_user (int argc,...);

#undef main

int main(int argc,char *argv[])

{

//初始化我们库函数需要的变量

printf("true main start\n");

int res=main_1_user (argc,argv);

// 销毁我们库函数自己创建的

//并打印内存结果

return res;

}

最后说明一下为什么开头要讲那么一个例子,因为有的人也许不用标准main[]数。Int main(int argc,char *argv[])也许他使用int main(void)所以我们得兼容他的各种声明。

2015-08-03

如何自动在main函数 里初始化

相关推荐