变量的作用域与生命周期

xTaskCreate(vLED1Task,“LED1”,128,NULL,1,NULL);
任务代码任务名称栈深度参数优先级返回的任务句柄

示例1:编写C语言程序,打印平方数。用户输入一个数字n,该程序会打印n个平方数,即$1^2$,$2^2$,$3^2$…$n^2$这些数字,比如用户输入5,打印1,4,9,16,25。

main.c

1234567891011121314151617181920212223
#include <stdio.h>#include <stdlib.h>#include "my_file.h" int globalVar1 = 36;//全局变量1int globalVar2[100];//全局变量2 int main(){    int n;    scanf("%d",&n);     int *pBuffer = (int*)malloc(sizeof(int) * n);    for(int i=0;i<n;i++)    {        pBuffer[i] = GetNextSquare();    }     for(int i=0;i<n;i++)    {        printf("%d,",pBuffer[i]);    }    return 0;}

my_file.c

123456789101112131415
static int staticGlobalVar1 = 100;//静态全局变量 static int Square(int input){    return input * input;} int GetNextSquare(){    static int num = 1;    int ret = Square(num);    num++;    return ret;} 
生命周期作用域
全局变量程序开始到结束整个程序所有文件
局部变量进入函数/代码块到退出时销毁仅定义的函数/代码块

示例2:初始化USART1,在工程中新建test.c文件,编写代码通过USART1打印Hello World
test.c

12345678910
#include <string.h> #include "stm32f1xx_hal.h" extern UART_HandleTypeDef huart1;//huart1是全局变量,可以跨文件调用,定义在main.cvoid SayHelloWorld(void){const char *str = "Hello World\n";HAL_UART_Transmit(&huart1, (const uint8_t *)str,strlen(str), HAL_MAX_DELAY);}

main.c

1
SayHelloWorld();
生命周期作用域
全局变量程序开始到结束整个程序的所有文件
静态全局变量(static)程序开始到结束仅在创建它的文件内部
局部变量进入函数/代码块到退出时销毁仅定义它的函数/代码块
静态全局变量初次调用创建它的函数时到退出时销毁仅定义它的函数/代码块
堆变量从malloc()到free()-
🔍 ×