当前位置: 首页 > news >正文

【嵌入式学习2】函数

目录

## 函数

## 函数分类

## 函数定义

1、无参数无返回值

2、有参数无返回值

3、有参数有返回值

## 函数声明

## 局部变量和全局变量

## 多文件编程

如何避免把同一个头文件 include 多次,或者头文件嵌套包含?

命令行编译文件

头文件包含的区别

## extern关键字


## 函数

  • 一种可重用的代码块
  • 用于执行特定任务或完成特定功能
  • 对具备相同逻辑的代码进行封装,提高代码的编写效率,实现对代码的重用

## 函数分类

  • 系统函数(库函数)
  • 自定义函数

## 函数定义

1、无参数无返回值
// 函数定义
void 函数名() {函数体
}// 函数调用
函数名();
2、有参数无返回值
// 函数定义
void 函数名(形参列表) {函数体
}// 函数调用
函数名(实参列表);
3、有参数有返回值
// 函数定义
返回类型 函数名(形参列表) {函数体return 和返回类型一致的数据(或变量);
}// 函数调用
和返回类型一致的变量 = 函数名(实参列表);

* 返回值:结束该函数,在return后的代码不会再被执行

## 函数声明

  • 如果函数定义代码没有放在函数调用的前面,这时候需要先做函数的声明
  • 所谓函数声明,相当于告诉编译器,函数是有定义的,再别的地方定义,以便使编译能正常进行
  • 注意:一个函数只能被定义一次,但可以声明多次
#include <stdio.h>// 函数的声明,分号不能省略
// 函数声明的前面可以加extern关键字,也可以不加
// extern int my_add(int a, int b);
int my_add(int a, int b);
// 另一种方式,形参名可以不写
// int my_add(int, int );int main() {// 函数调用int temp = my_add(10, 20);printf("temp  = %d\n", temp);return 0;
}// 函数定义
int my_add(int a, int b) {// 实现2个形参相加,并返回累加的结果int res = a + b;return res;
}

## 局部变量和全局变量

局部变量:

  • 定义在代码块{}里面的变量称为局部变量(Local Variable)
  • 局部变量的作用域(作用范围)仅限于代码块{}
  • 离开该代码块{}是无效的,离开代码块{}后,局部变量自动释放

全局变量:

  • 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件

## 多文件编程

  • 把函数声明放在头文件xxx.h中,在主函数中包含相应头文件
  • 在头文件对应的xxx.c中,实现xxx.h声明的函数

相当于把函数声明摘出来放在了另一个.h的文件中

如何避免把同一个头文件 include 多次,或者头文件嵌套包含?

在.h文件中添加以下内容

方法一:

#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__// 声明语句#endif

方法二:

#pragma once// 声明语句

命令行编译文件
gcc -g main.c func.c -o main.exe
  • -g 指定编译的文件,多个文件用空格隔开。
  • 注意:只需要编译c文件,h文件不需要加入进去;
  • -o 指定生成可执行文件的名字;

头文件包含的区别
#include <> 
表示系统直接按系统指定的目录检索#include "" 
表示系统先在 "" 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,再按系统指定的目录检索
  • #include "":优先在当前文件所在的目录中查找头文件,适用于用户自定义头文件。

  • #include <>:直接在系统头文件目录中查找头文件,适用于系统标准库头文件。

## extern关键字

主要用于声明外部变量或函数,当将一个变量或函数声明为extern时,该变量或函数是在其他地方定义的,我们只是在当前文件中引用它。

#include <stdio.h>extern int global_val;
extern void printf_val();int main() {global_val = 100;printf_val();return 0;
}
#include <stdio.h>int global_val;void printf_val() {printf("other->global_val: %d\n", global_val);
}

相关文章:

【嵌入式学习2】函数

目录 ## 函数 ## 函数分类 ## 函数定义 1、无参数无返回值 2、有参数无返回值 3、有参数有返回值 ## 函数声明 ## 局部变量和全局变量 ## 多文件编程 如何避免把同一个头文件 include 多次&#xff0c;或者头文件嵌套包含&#xff1f; 命令行编译文件 头文件包含的…...

平芯微PW5012应用电路

PW5012应用电路板介绍&#xff1a; 1.1 单节和两节锂电池升压 12V 或 9V&#xff0c; 1A 至 3A 电路板&#xff0c; 1.2 应用&#xff1a; 升压电压转换板 1.3 VIN 输入电压&#xff1a; 3V-9V 1.4 VOUT 输出电压&#xff1a; 9V 2A&#xff08;VIN3.7V&#xff09; &#xff0…...

Langchain4J框架相关面试题

以下是关于Langchain4J框架的面试题目及答案 ### Langchain4J基础概念类 1. **Langchain4J框架是什么&#xff1f;它的核心功能有哪些&#xff1f;** Langchain4J是一个用于构建语言模型应用的Java框架&#xff0c;它为开发者提供了一套简洁高效的API&#xff0c;使得在Jav…...

【MySQL】用户管理

目录 一、用户1.1 用户信息1.2 创建用户1.3 删除用户1.4 修改用户密码1.4.1 用户修改自己密码1.4.2 root用户修改指定用户的密码 二、数据库的权限2.1 给用户授权2.2 回收用户权限 结尾 一、用户 1.1 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中。…...

5.高频加热的原理与常用集成电路介绍

一、高频加热的类型 利用高频电源加热通常由两种方法&#xff1a;电介质加热&#xff08;被加热物体绝缘&#xff09;与感应加热&#xff08;被加热物体导电&#xff09;&#xff0c;详细解释如下&#xff1a; 电介质加热&#xff08;利用高频电压的高频电场导致物体自身分子摩…...

Elasticsearch:可配置的推理 API 端点分块设置

作者&#xff1a;来自 Elastic Daniel Rubinstein Elasticsearch 开放推理 API 现已支持可配置的分块&#xff0c;以便在文档摄取时处理语义文本字段。 Elasticsearch 推理 API 允许用户利用各种提供商的机器学习模型执行推理操作。其中一个常见用例是在索引中支持用于语义搜索…...

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.2多头注意力扩展与掩码机制(因果掩码与填充掩码)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.2 多头注意力扩展与掩码机制(`因果掩码与填充掩码`)1. 多头注意力机制:分治策略的数学实现1.1 多头注意力核心公式2. 逐行代码实现2.1 多头拆分与合并3. 掩码机制:注意力控制的核心技术3.1 因果…...

Scikit-learn模型评估全流程解析:从数据划分到交叉验证优化

模型评估的步骤、scikit-learn函数及实例说明 1. 数据划分&#xff08;Train-Test Split&#xff09; 函数&#xff1a;train_test_split使用场景&#xff1a;将数据分为训练集和测试集&#xff0c;避免模型过拟合。作用&#xff1a;确保模型在未见过的数据上验证性能。示例&…...

大模型量化框架GPTQModel的基本使用方法

接上一篇博客&#xff1a;AutoGPTQ报torch._C._LinAlgError: linalg.cholesky: The factorization could not be completed的解决办法-CSDN博客 如果Llama factory量化一直报错&#xff0c;可以改用其他的量化框架&#xff0c;例如GPTQ&#xff1a;https://github.com/ModelCl…...

HTTP长连接与短连接的前世今生

HTTP长连接与短连接的前世今生 大家好&#xff01;作为一名在互联网摸爬滚打多年的开发者&#xff0c;今天想跟大家聊聊HTTP中的长连接和短连接这个话题。 记得我刚入行时&#xff0c;对这些概念一头雾水&#xff0c;希望这篇文章能帮助新入行的朋友少走些弯路。 什么是HTTP…...

线程控制学习

1、线程创建&#xff1a; int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (*start_routine)(void*), void *arg); 参数 thread&#xff1a;返回线程ID&#xff1b;attr&#xff1a;设置线程的属性&#xff0c;attr为nullptr表示使用默认属性(一般…...

使用 Node.js 从零搭建 Kafka 生产消费系统

目录 一、Kafka 核心概念速览 二、环境准备 三、生产者实现&#xff1a;发送消息 四、消费者实现&#xff1a;处理消息 五、高级配置与最佳实践 六、常见问题解决 七、应用场景示例 总结 Apache Kafka 作为高吞吐、分布式的消息队列系统&#xff0c;在实时数据流处理中…...

【Linux系统】Linux权限讲解!!!超详细!!!

目录 Linux文件类型 区分方法 文件类型 Linux用户 用户创建与删除 用户之间的转换 su指令 普通用户->超级用户(root) 超级用户(root) ->普通用户 普通账户->普通账户 普通用户的权限提高 sudo指令 注&#xff1a; Linux权限 定义 权限操作 1、修改文…...

Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)

目录 一、安装前准备​1.版本选择依据2.​创建独立环境​ 二、详细安装步骤1.​通过conda自动安装依赖2.​手动验证依赖版本 三、补充说明1.组件依赖关系表2.常见问题解决方案​3.性能验证脚本 一、安装前准备 ​1.版本选择依据 当前最新稳定版&#xff1a;TensorFlow 2.13&a…...

Spring事务管理

介绍了事务的概念&#xff0c;事务的特性&#xff0c;JDBC 事务管理的步骤和操作过程&#xff0c;以及Spring事务管理的两种实现方式&#xff1a;编程式事务管理和声明式事务管理。 1.事务的概念 事务&#xff08;Transaction&#xff09;就是将一系列的数据库操作作为一个整体…...

避雷 :C语言中 scanf() 函数的错误❌使用!!!

1. 返回值说明 scanf函数会返回成功匹配并赋值的输入项个数&#xff0c;而不是返回输入的数据。 可以通过检查返回值数量来确认输入是否成功。若返回值与预期不符&#xff0c;就表明输入存在问题。 #include <stdio.h>int main() {int num;if (scanf("%d", …...

判断一个操作是不是允许

一、目的 简单探索一个URL请求是不是允许的。 二、具体过程 (一)系统的初始化 系统数据库有账户"admin"&#xff0c;密码是"123"。 账号"admin"的角色是管理员"manager"。 假设管理员身份设定的权限是&#xff1a; 1、对于/user/开头的…...

【FPGA开发】Cordic原理推导、Xilinx PG105手册解读

目录 Cordic原理推导PG105手册解读IP核总览核心计算功能总览基本握手信号非阻塞模式 NonBlocking Mode阻塞模式 Block Mode 数据格式数据映射 本文针对Cordic算法本身&#xff0c;以及Xilinx官方CORDIC IP做学习记录&#xff0c;如有纰漏&#xff0c;欢迎指正&#xff01; Cord…...

数据结构与算法:宽度优先遍历

前言 进入图论部分难度明显提升了一大截&#xff0c;思路想不到一点…… 一、宽度优先遍历 1.内容 宽度优先遍历主要用于在图上求最短路。 &#xff08;1&#xff09;特点 宽度优先遍历的特点就是逐层扩展&#xff0c;最短路即层数 &#xff08;2&#xff09;使用条件 …...

PyTorch 面试题及参考答案(精选100道)

目录 PyTorch 的动态计算图与 TensorFlow 的静态计算图有何区别?动态图的优势是什么? 解释张量(Tensor)与 NumPy 数组的异同,为何 PyTorch 选择张量作为核心数据结构? 什么是 torch.autograd 模块?它在反向传播中的作用是什么? 如何理解 PyTorch 中的 nn.Module 类?…...

【数理基础】【概率论与数理统计】概率论与数理统计本科课程总结、资料汇总、个人理解

1 前言 概率论与数理统计是数学系核心的基础专业课&#xff0c;我本科的时候&#xff0c;是拆开上的&#xff0c;对应工科专业的高数中的概率论与数理统计&#xff0c;在量子力学&#xff0c;机器学习&#xff0c;计算机领域深度学习&#xff0c;大模型&#xff0c;机器人控制…...

美制 / 英制单位换算/公制/帝国制 单位转换速查表

文章目录 &#x1f4a1;Introduction&#x1f4cf; 英制&#xff08;美制&#xff09;单位与公制换算速查表&#x1f9f1; 一、长度&#xff08;Length&#xff09;&#x1f9f4; 二、体积&#xff08;Volume / Liquid Measure&#xff09;⚖️ 三、质量 / 重量&#xff08;Wei…...

ENSP学习day9

ACL访问控制列表实验 ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种用于控制用户或系统对资源&#xff08;如文件、文件夹、网络等&#xff09;访问权限的机制。通过ACL&#xff0c;系统管理员可以定义哪些用户或系统可以访问特定资源&#x…...

我爱学算法之——滑动窗口攻克子数组和子串难题(中)

学习算法&#xff0c;继续加油&#xff01;&#xff01;&#xff01; 一、将 x 减到 0 的最小操作数 题目解析 来看这一道题&#xff0c;题目给定一个数组nums和一个整数x&#xff1b;我们可以在数组nums的左边或者右边进行操作&#xff08;x减去该位置的值&#xff09;&#…...

Linux centos 7 vsftp本地部署脚本

下面是脚本: #!/bin/bash #function:vsftpd脚本 #author: 20230323 IT 小旋风# 判断是否是root用户 if [ "$USER" ! "root" ]; thenecho "不是root 装个蛋啊"exit 1 fi# 关闭防火墙 systemctl stop firewalld && systemctl disable …...

编程考古-安德斯·海尔斯伯格(Anders Hejlsberg)回答离开Borland的原因

安德斯海尔斯伯格&#xff08;Anders Hejlsberg&#xff09;是著名的编程语言和工具开发者&#xff0c;曾主导开发了 Turbo Pascal、Delphi&#xff08;Borland 时期&#xff09;&#xff0c;以及加入微软后参与的 C# 和 TypeScript。关于他离开 Borland 的原因&#xff0c;可以…...

数据库数值函数详解

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 数值函数是数据库中用于处理数值数据的函数,可以用于执行各种数学运算、统计计算等。数值函数在数据分析及处理时非常重要,能够帮助我们进行数据的聚合、计算和转换。在本篇博客中,我们将详细介绍常用的…...

SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题

文章引用&#xff1a;https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值&#xff0c;访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…...

Bash 脚本基础

一、Bash 脚本基础 什么是 Bash 脚本&#xff1a;Bash 脚本是一种文本文件&#xff0c;其中包含了一系列的命令&#xff0c;这些命令可以被 Bash shell 执行。它用于自动化重复性的任务&#xff0c;提高工作效率。 Bash 脚本的基本结构&#xff1a;以 #!/bin/bash 开头&#x…...

【Linux】线程库

一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s &#xff0c;我的地址&#xff1a;0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…...

Smith3.0 4.0的阻抗匹配操作方法

阅读了这篇文章中&#xff0c;我get到一些知识点的总结&#xff1a; 百度安全验证https://baijiahao.baidu.com/s?id1822624157494292625 1&#xff09;红色圆代表阻抗圆&#xff0c;绿色圆代表导纳圆。 2&#xff09;圆心位于50欧&#xff0c;最左侧为0欧&#xff0c;最右侧…...

装饰器模式 (Decorator Pattern)

装饰器模式 (Decorator Pattern) 是一种结构型设计模式,它动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。 一、基础 1 意图 动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰器模式相比生成子类更为灵活。 2 适用场景 当…...

生活电子类常识——搭建openMauns工作流+搭建易犯错解析

前言 小白一句话生成一个网站&#xff1f;小白一句话生成一个游戏&#xff1f;小白一句话生成一个ppt?小白一句话生成一个视频&#xff1f; 可以 原理 总体的执行流程是 1&#xff0c;用户下达指令 2&#xff0c;大模型根据用户指令&#xff0c;分解指令任务为多个细分步骤…...

题型笔记 | Apriori算法

目录 内容拓展知识 内容 其步骤如下&#xff1a; 扫描全部数据&#xff0c;产生候选项 1 1 1 项集的集合 C 1 C_1 C1​根据最小支持度&#xff0c;由候选 1 1 1 项集的集合 C 1 C_1 C1​ 产生频繁 1 1 1 项集的集合 L 1 L_1 L1​。若 k > 1 k > 1 k>1&#xf…...

雷电模拟器启动94%卡住不动解决方案

安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法 首先看官方论坛常见问题来尝试解决&#xff1a; 安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法-雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器帮助中心 所有…...

站群服务器是什么意思呢?

站群服务器是一种专门为托管和管理多个网站而设计的服务器&#xff0c;其核心特点是为每个网站分配独立的IP地址。这种服务器通常用于SEO优化、提高网站权重和排名&#xff0c;以及集中管理多个网站的需求。以下是站群服务器的详细解释&#xff1a; 一、站群服务器的定义 站群…...

靶场(十五)---小白心得思路分析---LaVita

启程&#xff1a; 扫描端口&#xff0c;发现开放22&#xff0c;80端口&#xff0c;发现ws.css可能存在exp&#xff0c;经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...

第十六次CCF-CSP认证(含C++源码)

第十六次CCF-CSP认证 小中大满分思路遇到的问题 二十四点&#xff08;表达式求值&#xff09;难点满分思路 小中大 这次我觉得是非常难的 只有一道easy 做的时候看这个通过率就有点不对劲 上官网看了一眼平均分 106 就是人均A一道的水准 一开始看了半天 第三题几乎还是下不了手…...

大数据中的数据预处理:脏数据不清,算法徒劳!

大数据中的数据预处理&#xff1a;脏数据不清&#xff0c;算法徒劳&#xff01; 在大数据世界里&#xff0c;数据预处理是个让人又爱又恨的环节。爱它&#xff0c;是因为数据预处理做好了&#xff0c;后续的模型跑起来又快又准&#xff0c;仿佛给AI装上了火箭助推器&#xff1…...

17153 班级活动

17153 班级活动 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;2023、思维、国赛 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10…...

算力100问☞第93问:算力资源为何更分散了?

目录 1、政策驱动与地方投资的盲目性 2、美国芯片断供与国产替代的阵痛 3、政企市场对私有云的偏好 4、技术标准与供需结构的失衡 5、产业生态与市场机制的滞后 6、破局路径与未来展望 在大模型和人工智能技术快速发展的背景下,算力资源已成为数字经济时代的核心基础设施…...

记录 macOS 上使用 Homebrew 安装的软件

Homebrew 是 macOS 上最受欢迎的软件包管理器之一&#xff0c;能够轻松安装各种命令行工具和 GUI 应用。本文记录了我通过 Homebrew 安装的各种软件&#xff0c;并对它们的用途和基本使用方法进行介绍。 &#x1f37a; Homebrew 介绍 Homebrew 是一个开源的包管理器&#xff…...

Java 安装开发环境(Mac Apple M1 Pro)

下载 Java Downloads 查看本地安装的 JDK 所在位置以及 JAVA 版本 系统默认的安装处 /Library/Java/JavaVirtualMachines配置Java 添加环境变量 vim &#xff5e;/.bash_profileAdd # 安装位置 export JAVA_11_HOME"/Library/Java/JavaVirtualMachines/zulu-11.jdk…...

微前端框架的实战demo

以下是基于主流微前端框架的实战 Demo 开发指南&#xff0c;综合多个开源项目与实践案例整理而成&#xff1a; 一、qiankun 框架实战 1. 核心架构 主应用&#xff1a;负责路由分发、子应用注册与生命周期管理子应用&#xff1a;独立开发部署&#xff0c;支持不同技术栈&#…...

win32汇编环境,网络编程入门之九

;在上一教程里&#xff0c;我们学习了在连接成功网站后&#xff0c;应该发送什么数据给网站 ;在前面的几个教程里&#xff0c;简单地运行了套接字机制连接网站的方式&#xff0c;这是字节级的网络连接&#xff0c;扩展几乎是无限的。 ;想了想&#xff0c;这个开个头就行了&…...

OceanBase 4.3.3 AP 解析:应用 RoaringBitmaps 类型处理海量数据的判重和基数统计

对于大数据开发人员而言&#xff0c;处理海量数据的判重操作和基数统计是常见需求&#xff0c;而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案&#xff0c;许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本&#xff0c;作为专为OLAP场景设计的正…...

点亮STM32最小系统板LED灯

对于如何点亮板载LED灯只需要掌握如何初始化GPIO引脚&#xff0c;并改变GPIO引脚的电平即可实现点亮或者熄灭LED。 Led_INFO led_info {0}; led_info 是一个结构体变量&#xff0c;类型为 Led_INFO&#xff0c;用于存储LED的状态信息。这里初始化为 {0}&#xff0c;表示所有成…...

分区表的应用场景与优化实践

当表的数据量非常大,达到几千万甚至上亿行时,全表扫描会很慢,这时候分区可以帮助缩小扫描范围。比如,在一个电商系统中,订单表可能按月份分区,这样查询某个月的订单时,只需要扫描对应的分区,而不是整个表。或者在日志系统中,按天分区,方便归档和删除旧日志。 另外,如…...

如何高效参与 GitHub 知名项目开发并成为核心贡献者

参与知名 GitHub 项目开发不仅能提升你的编程能力&#xff0c;还能积累开源贡献经验&#xff0c;甚至为求职加分。以下是详细步骤&#xff1a; 1. 选择合适的 GitHub 项目 (1) 确定兴趣方向 后端开发&#xff1a;Spring、Spring Boot、Netty前端开发&#xff1a;React、Vue、…...

AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅

探秘海螺AI&#xff1a;多模态架构下的认知智能新引擎 在人工智能持续进阶的进程中&#xff0c;海螺AI作为一款前沿的多功能AI工具&#xff0c;正凭借其独特的多模态架构崭露头角。它由上海稀宇科技有限公司&#xff08;MiniMax&#xff09;精心打造&#xff0c;依托自研的万亿…...