鱼C论坛

 找回密码
 立即注册
查看: 1997|回复: 0

[作品展示] S1E32:作用域和链接属性

[复制链接]
发表于 2023-11-15 22:19:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. //鱼C论坛——BaysideLizard写于2023年11月15日
  3. /*
  4. C语言编译器可以确认4种不同类型的作用域:
  5. --代码块作用域
  6. --文件作用域
  7. --原型作用域
  8. --函数作用域:goto语句的标签只在一个函数内部生效。
  9. */
  10. void fun(void);
  11. //文件作用域,函数名字从这里到文件结尾起作用。
  12. int add(int x,int y);//原型作用域,这里的x,y可以与下面函数形参不一样。

  13. int main()
  14. {
  15.     int a,b;
  16.     int i = 100;//代码块i1
  17.     {
  18.         int i = 101;//代码块i2
  19.         {
  20.             int i = 102;//代码块i3
  21.             printf("i = %d\n",i);
  22.         }
  23.         //i = 101
  24.         {
  25.             printf("i = %d\n",i);
  26.             int i = 103;//代码块i4
  27.             printf("i = %d\n",i);
  28.         }
  29.         printf("i = %d\n",i);
  30.     }
  31.     printf("i = %d\n",i);

  32.     fun();
  33.     extern int count;
  34.     count++;
  35.     printf("In main,count = %d\n",count);

  36.     printf("Please input a b:");
  37.     scanf("%d %d",&a,&b);
  38.     printf("%d + %d = %d",a,b,add(a,b));

  39.     return 0;
  40. }

  41. int count;
  42. //文件作用域,全局变量count从这里到文件结尾起作用。

  43. void fun(void)
  44. {
  45.     count++;
  46.     printf("In fund,count = %d\n",count);
  47. }

  48. int add(int a,int b)
  49. {
  50.     int res;
  51.     res = a + b;

  52.     return res;
  53. }

  54. /*定义和声明:
  55. 定义:该变量还没有,定义只能来一次。
  56. 声明:该变量已经被定义了,声明可以有很多次。
  57. 特别的:局部变量既是定义又是声明。
  58. */

  59. /*链接属性:
  60. ·external(外部的)
  61. --多个文件中声明的同名标识符表示同一个实体。
  62. ·internal(内部的)
  63. --单个文件中声明的同名标识符表示同一个实体。
  64. ·none(无)
  65. --声明的同名标识符被当作独立不同的实体。

  66. 只有具备文件作用域的标识符才能拥有external或internal的链接属性,
  67. 其他作用域的标识符都是none属性。
  68. 具备文件作用域的标识符默认拥有external属性。
  69. */

  70. /*
  71. 使用static关键字可以使得原先拥有external属性的标识符变为internal属性。
  72. --只对具有文件作用域的标识符生效。
  73. --只能修改一次,改成internal就改不回external了。
  74. */
复制代码








运行结果:
i = 102
i = 101
i = 103
i = 101
i = 100
In fund,count = 1
In main,count = 2
Please input a b:8 9
8 + 9 = 17
Process returned 0 (0x0)   execution time : 3.972 s
Press any key to continue.








在FishC学C的第十六天
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表