STM32 C语言函数

一、函数定义的基本结构

复制代码
返回类型 函数名(参数列表) {
    // 函数体
    // 语句序列
    return 返回值;  // 可选,取决于返回类型
}

二、函数定义的组成部分

1. 返回类型

可以是int, float, char, void等

void表示函数不返回值

默认返回类型为 int(不建议依赖默认值)

2. 函数名

有效的C标识符

遵循命名规则(字母、数字、下划线,不能以数字开头)

3. 参数列表

复制代码
// 有参数
int add(int a, int b) { return a + b; }

// 无参数
void printHello(void) { printf("Hello"); }
void printHello() { printf("Hello"); }

4. 函数体

包含变量声明和执行语句

实现函数的具体功能

三、完整的函数定义示例

复制代码
// 示例1:有返回值,有参数
int max(int x, int y) {
    if (x > y) {
        return x;
    } else {
        return y;
    }
}

// 示例2:无返回值,有参数
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

// 示例3:无参数,无返回值
void greeting(void) {
    printf("Welcome to C programming!\n");
}

// 示例4:返回指针
int* createArray(int size) {
    int* arr = (int*)malloc(size * sizeof(int));
    return arr;
}

// 示例5:递归函数
int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

四、函数定义 vs 函数声明

复制代码
// 函数声明(原型) - 在头文件或使用前声明
int add(int a, int b);  // 只包含返回类型、函数名和参数类型

// 函数定义 - 在源文件中实现
int add(int a, int b) {
    return a + b;  // 包含具体实现
}

五、参数传递方式

复制代码
// 1. 值传递(默认)
void modifyValue(int x) {
    x = 100;  // 只修改副本
}

// 2. 指针传递
void modifyPointer(int* x) {
    *x = 100;  // 修改原值
}

// 3. 数组传递(实际传递指针)
void modifyArray(int arr[], int size) {
    arr[0] = 100;  // 修改原数组
}

// 4. 结构体传递(值传递)
struct Point {
    int x, y;
};

void modifyPoint(struct Point p) {
    p.x = 100;  // 只修改副本
}

// 5. 结构体指针传递
void modifyPointPtr(struct Point* p) {
    p->x = 100;  // 修改原结构体
}

六、静态函数

复制代码
static int helperFunction(int x) {
    // 只能在本文件中访问
    return x * 2;
}

七、内联函数

复制代码
inline int square(int x) {
    return x * x;
    // 建议编译器将函数代码直接插入调用处
    // 减少函数调用开销
}

八、可变参数函数

复制代码
#include <stdarg.h>

int sum(int count, ...) {
    int total = 0;
    va_list args;
    va_start(args, count);
    
    for (int i = 0; i < count; i++) {
        total += va_arg(args, int);
    }
    
    va_end(args);
    return total;
}

// 使用
int result = sum(4, 1, 2, 3, 4);  // 返回10
相关推荐
爱喝纯牛奶的柠檬2 小时前
基于STM32的4*4矩阵软键盘驱动
stm32·嵌入式硬件·矩阵
逐步前行3 小时前
STM32_DMA_寄存器操作
stm32·单片机·嵌入式硬件
FakeOccupational5 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存结构图 + MPU内存保护单元 + Cache基本操作 + Cache&DMA 时序图
笔记·stm32·缓存
LCG元6 小时前
基于STM32CubeMX的HAL库串口通信与DMA传输深度优化
stm32·单片机·嵌入式硬件
forAllforMe7 小时前
LAN9252 从机模式寄存器的配置代码示例
stm32·单片机·嵌入式硬件
guygg888 小时前
基于STM32的贪吃蛇游戏实现(OLED屏)
stm32·嵌入式硬件·游戏
BackCatK Chen8 小时前
STM32保姆级入门教程|第4章:GPIO输入+外部中断 实现按键控制LED(手把手全流程)
stm32·单片机·外部中断·按键控制 led·stm32cubeid·gpio 输入
szxinmai主板定制专家9 小时前
基于 STM32 + FPGA 船舶电站控制器设计与实现
arm开发·人工智能·stm32·嵌入式硬件·fpga开发·架构
我不是程序猿儿9 小时前
【嵌入式】编码器计数倍频,机械一格与电气计数
stm32·单片机·嵌入式硬件·学习
_Ningye19 小时前
STM32 — 6.1 TIM定时中断
stm32·单片机·嵌入式硬件