【C语言】【static用法】C语言实现静态代码块

问题引入

有这样一个需求,希望某函数里的一段代码(如初始化)仅执行一次。
比如:

  • 有一个数组,数组元素个数比较多或具体个数不确定(不同产品宏定义不同)
  • 需要把所有元素初始化为特定值(比如是-1,不是0)
  • 仅初始化为一次(不管调用多少次)

此时就没办法直接用下面两种方式实现:

static INT32 szArrCountryCode[CARD_NUM] = {-1}
for (i=0; i<CARD_NUM; i++)
{
    szArrCountryCode[i] = -1;
}

来实现。

如果是Java语言,非常简单,可利用static的代码块来做:

static{
    int[] szArrCountryCode= new int[CARD_NUM];
    for(int i = 0; i < CARD_NUM; i++)
    {
        szArrCountryCode[i] = -1;
    }
}

解决方案

方法一、利用static BOOL类型变量直接控制

  • 这种比较常用,大多数人马上就能想出来的做法。
staic BOOL bSzArrCountryCodeInit = FALSE;

if (!bSzArrCountryCodeInit )
{
		for (i=0; i<CARD_NUM; i++)
		{
    		szArrCountryCode[i] = -1;
		}
		bSzArrCountryCodeInit  = TRUE;
}
  • 上述思路的一个变体:
void initszArrCountryCode()
{
	for (i=0; i<CARD_NUM; i++)
	{
    	szArrCountryCode[i] = -1;
    }
    bSzArrCountryCodeInit   = TRUE;
}
static BOOL bSzArrCountryCodeInit = FALSE;
bSzArrCountryCodeInit == FALSE?(initszArrCountryCode()):;

方法二、利用static变量的初始化

例1、利用赋值语句
BOOL initszArrCountryCode()
{
	for (i=0; i<CARD_NUM; i++)
	{
    	szArrCountryCode[i] = -1;
    }
    return TRUE;
}
static BOOL bSzArrCountryCodeInit  = initszArrCountryCode()
例2、利用逗号运算符
  • 由于代码块嵌套到static变量的初始化中,所以可保证代码块仅被执行一次:
void initszArrCountryCode()
{
	for (i=0; i<CARD_NUM; i++)
	{
    	szArrCountryCode[i] = -1;
    }
}
static bool dummy = (initszArrCountryCode(),true);

如本文对你有些许帮助,欢迎打赏或通过里面链接购买书籍:
支付宝打赏方式及我的购物小店

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花神庙码农

你的鼓励是我码字的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值