【嵌入式学习-C语言篇】 static 的使用

static 的使用

static 的常用场景

  1. 智能网关项目:zigbee ble wifi模块的同事都需要用日志打印的函数,如何设计一个日志打印函数给他们使用?

ZigBeeBLEWiFi是三种常见的无线通信模块。这些模块用于构建物联网设备,使设备能够进行无线通信。

  • ZigBee是一种低功耗、低成本的无线局域网协议。它基于IEEE 802.15.4标准,适用于短距离通信。ZigBee模块可以实现多种ZigBee规范网络通信功能。
  • BLE(Bluetooth Low Energy) 是一种低功耗、短距离、可互操作的无线技术。它是蓝牙协议的标准版本,适用于低功耗设备。BLE模块可以实现智能设备之间的无线通信。
  • WiFi(Wireless Fidelity)是一种基于IEEE 802.11标准的无线局域网连接技术。它使用2.4GHz和5GHz频段,可以实现高速的无线网络连接。
    详细见:https://zhuanlan.zhihu.com/p/415436445
  1. 点餐屏:统计损耗(打印机)模块的使用次数。

把static当与面对对象语言中的private来使用(限制作用域)

static 可以当做java或者cpp中的private来使用,比如下面的代码中,我们在test.h中定义了一个void test(void)方法(类似面对对象中的抽象类),随后我们在static.c中实现test方法,static.c文件中不直接写test方法,而是写了一个test_print方法,之后再用test方法调用test_print方法。你会好奇这有什么作用? 其实如果学过面对对象语言就知道它的作用。我们来假设一下,如果我们test方法里面会调用方法1和方法2,如果我们不把方法1和方法2前面加上static,那么别人可以直接不通过test方法调用来执行全部的方法1和方法2,而是直接调用方法1或者方法2中其中一个,那么这个代码就非常不安全。你可能会想那我把方法1和方法2直接写在test方法中不就行了?那如果方法1和方法2会被多个方法调用到呢,你岂不是要不停的写重复代码?其次如果你方法1和方法2写在一起也不方便之后的代码维护,假设他们的代码量很大。

代码如下

test.h

// test.h

#ifndef _TEST_H_    
#define _TEST_H_

void test(void);

#endif

static.c

#include<stdio.h>
#include "test.h"

static void test_print(){
    printf("test_print \n");
}

void test(){
    test_print();
}

test.c

#include <stdio.h>
#include "test.h"

void main(){
    test();
}

我们在test.c所处文件下打开终端命令行输入:

 gcc .\test.c .\static.c -o .\test

这里需要注意如果不使用命令行而直接使用vscode来直接执行test.c文件会报错,主要原因在于test.c中的test方法需要static.c中的实现,而编译器又是根据文件名的排序顺序来进行编译的,那么如果static.c文件在test.h上面,会导致编译不到就会报错。
执行完上面的代码后,我们会获得一个test.exe文件,我们直接在命令行中执行这个exe即可

.\test.exe

得到输出 test_print

全局变量使用

统计打印机模块的使用次数时,我们可以用static来声明变量count,之后count会在整个程序关闭之前都保持全局变量的使用。
代码

void func(void){
	static int count = 0;
	count++;
	printf("count为%d", count);
}

当我们别的方法想要看看打印机已经使用了几次,可以直接调用func函数来进行查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值