C语言中的变量
程序员文章站
2022-07-07 23:18:50
...
一.普通局部变量:局部变量无论是否静态均不允许同名,否则会出现error;当局部变量与全局变量同名时,依据就近原则进行判断。局部变量同名是指在复合语句的嵌套中,内层复合语句变量与外层复合语句变量同名,这样是允许的。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(int argc, char *argv[])
{
int a = 0;
static int a = 0;//error
printf("%d\n", a);
system("pause");
return 0;
}
二.普通全局变量:全局变量无论是否静态都不允许同名,否则编译器会给出error。同名情况同上。但是需要注意的是,普通全局变量与外部声明的普通全局变量重名时,vs会报错,gcc会给出警告。
fun.c:
int a = 0;
test.c:
extern a;
int a = 20;
三.静态局部变量:只会定义一次,以后的定义,将自动忽略。要注意理解,静态变量所说的重定义是指在函数的多次调用中,而不是在一个函数体中定义多次。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
static int a = 0;
a++;
static int a = 0;//error
printf("%d\n", a);
system("pause");
return 0;
}
四.静态全局变量:静态全局变量只在当前源文件有效。当外部extern声明的外部全局变量与静态全局变量在同一源文件时,不会出现任何问题,程序能够正常运行。
定义 | 作用范围 | 生命周期 | 内存区域 | 不初始化时变量的值 | |
普通局部变量 | {}内部 | 复合语句中离它最近的{}内 | 离他最近的大括号之间 | 栈区 | 内容随机 |
普通全局变量 | 函数外部 | 当前源文件和其他extern修饰的源文件 | 整个进程 | 堆区 | 0 |
静态局部变量 | {}内部static修饰 | 离它最近的{}内 | 整个进程 | 堆区 | 0 |
静态全局变量 | 函数外部static修饰 | 当前源文件有效,不能被外部文件使用。 | 整个进程 | 堆区 | 0 |
上一篇: flex itemRenderer使用(五):效率
下一篇: C语言中的静态局部变量