从一段代码看include的妙用以及C99的新式结构体初始化

前言

本文将以恒玄公司提供的某款蓝牙降噪方案中的代码片段做实际例子,对include的妙用和C99标准新添的结构初始化方法进行介绍。

代码实例

#define FIR_COEF_NUM                        384
typedef struct {
    int8_t  gain0;
    int8_t  gain1;
    int16_t len;
    int16_t coef[FIR_COEF_NUM];
} FIR_CFG_T;
const FIR_CFG_T audio_eq_fir_cfg = {
    .gain0 = 6,
    .gain1 = 6,
    .len = 128,
    .coef = {
        #include "res/eq/EQ_COEF.txt"
    }
};

include的妙用

include用于将指定头文件嵌入源文件中,如大家最熟悉的#include<stdio.h>语句的目的就是讲C语言的标准输入输出头文件嵌入到当前代码中。事实上,include的使用不限制文件类型,也就是说,我们不仅可以将头文件嵌入到源代码中,也可以将部分源代码嵌入到源代码中,甚至还能将数据嵌入到源代码中!
在上述代码中,coef是一个数组,用于存放一些配置参数。EQ_COEF.txt文件的部分内容如下:

0x7FFF,
0,
0,
0,
0,
0,
0,

可以看出,EQ_COEF.txt文件被include之后,效果等同于代码:

.coef = {
       0x7FFF,0,0,0,0,0,0,
    }

这样做的好处是:可以在不修改源代码的条件下,仅对EQ_COEF.txt文件做修改,便可更改我们需要的配置。如果EQ_COEF.txt是由其他程序生成的,我们也不必频繁的复制粘贴即可更改配置。

C语言结构体初始化方法

C89中结构体的初始化

以结构体Student举例:

struct Student{
int id;
int age;
float score;
};

1定义时赋值

struct Student stu1 = {1001,12,90};

注意:这种方法需要将赋值与定义的项按顺序一一对应,不能在中间漏写。
2.定义后赋值

struct Student stu1;
stu1.id = 1001;
stu1.age = 12;
stu1.score = 90;

C99中新增的结构体的初始化方法

同样以结构体Student为例:

struct Student stu1={
	.id = 1001,
	.score = 90,
	.age = 12
};

该方法需要在想要赋值的字段前加一个半角的点,赋值后以半角的逗号结尾,最后一项不必加逗号。
这种方式的好处是可以不按照结构体申明的顺序来赋值,方便我们将同类型的字段放到一起便于读写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值