鸟语天空
外部变量
post by:追风剑情 2019-12-29 22:07

示例

//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//malloc()、free()
#include <stdlib.h>
#include <time.h>

//外部: 变量定义在所有函数外面
//文件作用域: 从变量的声明处到文件尾
/*
外部变量具有静态存储期。因此,无论程序执行到main()、next()
还是其他函数,数组Up及其值都一直存在。
*/
int Errupt = 10;  /*外部定义的变量*/
double Up[100]; /*外部定义的数组*/
extern char Coal; /*如果Coal被定义在另一个文件中, 则必须这样声明*/

void next(void);

//argc: 参数个数 argv[]: 参数数组
//int main(int argc, char **argv)
int main(int argc, char *argv[])
{
	extern int Errupt; //可选的声明
	extern double Up[]; //可选的声明

	//块作用域中的变量将隐藏文件作用域中的变量
	//int Errupt; //创建了一个自动变量
	//加上auto明确声明自动变量
	//auto int Errupt;

	printf("main Errupt=%d\n", Errupt);
	next();

	system("pause");
	return 0;
}

/* 外部变量的作用域:从声明处到文件尾。*/
int Pocus; //只对next()可见

/*
初始化外部变量
外部变量和自动变量类似,也可以被显式初始化。与自动变量不同的是,如果未初始化
外部变量,它们会被自动初始化为0.这一原则也适用于外部定义的数组元素。与自动
变量的情况不同,只能使用常量表达式初始化文件作用域变量。
*/
int x = 10;
int y = 3 + 20;
size_t z = sizeof(int);
//int x2 = 2 * x; //不行,x是变量
//(只要不是变长数组,sizeof表达式可被视为常量表达式)

void next()
{
	printf("next Errupt=%d\n", Errupt);
}

运行测试

1111.png

C99和C11标准都要求编译器识别局部标识符的前63个字符外部标识符的前31个字符。这修订了以前的标准,即编译器识别局部标识符前31个字符和外部标识符前6个字符。你所用的编译器可能还执行以前的规则。外部变量名比局部变量名的规则严格,是因为外部变量名还要遵循局部环境规则,所受的限制更多。

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容