学习ortp库中发现了一个技巧
static int ortp_initialized=0; //先定义一个静态全局变量
/**
* Initialize the oRTP library. You should call this function first before using
* oRTP API.
**/
void ortp_init()
{
if (ortp_initialized) return; //第一次调用的时候是0,所以不会return
ortp_initialized++; //被调用过之后就是>0所以后续再调用会return
#ifdef WIN32
win32_init_sockets();
#endif
av_profile_init(&av_profile);
ortp_global_stats_reset();
init_random_number_generator();
#ifdef HAVE_SRTP
if (srtp_init() != err_status_ok) {
ortp_fatal("Couldn't initialize SRTP library.");
}
err_reporting_init("oRTP");
#endif
ortp_message("oRTP-" ORTP_VERSION " initialized.");
}
知识点
1.全局变量是存储在静态存储区的,与之对应的是局部变量,存放在动态存储区
2.静态变量和全局变量都是存放在静态存储区,所以只有整个程序执行完才会被释放掉,而局部变量的话函数执行完就会被释放掉了
3.这里的static int ortp_initialized=0; 前面加了个static,代表这个变量的作用域只在这个c文件里面。