外部变量

作者:追风剑情 发布于:2019-12-29 22:07 分类:C

示例

  1. //Visual Studio中加上这句才可以使用scanf()
  2. //否则只能使用scanf_s()
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. //malloc()、free()
  8. #include <stdlib.h>
  9. #include <time.h>
  10.  
  11. //外部: 变量定义在所有函数外面
  12. //文件作用域: 从变量的声明处到文件尾
  13. /*
  14. 外部变量具有静态存储期。因此,无论程序执行到main()、next()
  15. 还是其他函数,数组Up及其值都一直存在。
  16. */
  17. int Errupt = 10; /*外部定义的变量*/
  18. double Up[100]; /*外部定义的数组*/
  19. extern char Coal; /*如果Coal被定义在另一个文件中, 则必须这样声明*/
  20.  
  21. void next(void);
  22.  
  23. //argc: 参数个数 argv[]: 参数数组
  24. //int main(int argc, char **argv)
  25. int main(int argc, char *argv[])
  26. {
  27. extern int Errupt; //可选的声明
  28. extern double Up[]; //可选的声明
  29.  
  30. //块作用域中的变量将隐藏文件作用域中的变量
  31. //int Errupt; //创建了一个自动变量
  32. //加上auto明确声明自动变量
  33. //auto int Errupt;
  34.  
  35. printf("main Errupt=%d\n", Errupt);
  36. next();
  37.  
  38. system("pause");
  39. return 0;
  40. }
  41.  
  42. /* 外部变量的作用域:从声明处到文件尾。*/
  43. int Pocus; //只对next()可见
  44.  
  45. /*
  46. 初始化外部变量
  47. 外部变量和自动变量类似,也可以被显式初始化。与自动变量不同的是,如果未初始化
  48. 外部变量,它们会被自动初始化为0.这一原则也适用于外部定义的数组元素。与自动
  49. 变量的情况不同,只能使用常量表达式初始化文件作用域变量。
  50. */
  51. int x = 10;
  52. int y = 3 + 20;
  53. size_t z = sizeof(int);
  54. //int x2 = 2 * x; //不行,x是变量
  55. //(只要不是变长数组,sizeof表达式可被视为常量表达式)
  56.  
  57. void next()
  58. {
  59. printf("next Errupt=%d\n", Errupt);
  60. }

运行测试

1111.png

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

标签: C语言

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号