当前位置: 首页 > 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);
}

相关文章:

  • 【MySQL】字符集与排序规则
  • unsloth微调QwQ32B(4bit)
  • PyTorch 深度学习实战(22):多智能体强化学习(MARL)
  • QT5.14.2 gradle 构建安卓失败的处理方法
  • [RoarCTF 2019]Easy Calc-3.23BUUCTF练习day5(2)
  • 大语言模型-2.2/3-主流模型架构与新型架构
  • CH32V208蓝牙内部带运放32位RISC-V工业级微控制器CH32V208CBU6、CH32V208GBU6开发板原理图和PCB
  • 【Linux文件IO】Linux中标准IO的API的描述和基本用法
  • SpringBoot集成Couchbase开发与实践
  • 使用 docker compse 启动 Milvus 修改 MINIO_ACCESS_KEY 导致启动失败
  • onedav一为导航批量自动化导入网址(完整教程)
  • 回归——数学公式推导全过程
  • //TODO 动态代理的本质?
  • 深度学习与计算机视觉方向
  • MATLAB实现基于“蚁群算法”的AMR路径规划
  • 蓝桥杯 回文数组
  • 常见中间件漏洞之四:Apache
  • 通信基本概念
  • windows切换系统版本
  • 【uni-app】tabBar使用
  • 张广智︱“编年事辑”:打开学人心路历程的窗户
  • 遭“特朗普关税”冲击,韩国今年经济增长预期“腰斩”降至0.8%
  • 4月企业新发放贷款利率处于历史低位
  • 央媒评网红质疑胖东来玉石定价暴利:对碰瓷式维权不能姑息
  • 反犹、资金与抗议:特朗普的施压如何撕裂美国大学?|907编辑部
  • Manus向全球用户开放注册