c语言--名字作用域,声明

1.作用域规则

(1). 名字的作用域指程序中可使用该名字的部分;
(2). 外部变量或函数的作用域从声明它的地方开始,到其所在的文件的末尾结束。
(3). 声明
使用另一个源文件中定义的变量或函数或使用当前源文件中当前位置后的变量或函数,为了名字可见,需要在当前位置前添加声明。
c语言外部变量的声明必须添加extern前缀修饰,否则会被认为是变量定义。
(4). 变量声明与定义
a. 变量声明用于说明变量的属性,变量定义除此之外还将引起存储器的分配.
b. 外部变量初始化只能出现在定义中.
c. 定义只有一个,声明可以有多个.
d. 数组定义时需要指明容量,声明时可以不必.

2.static变量

(1). 使用static修饰变量或函数定义时,可以使得修饰的变量或函数只在定义的源文件内使用。不可在其他源文件中通过声明来使用。
(2). 局部变量采用static修饰后,只在首次进入局部作用域时初始化一次。后续每次进入局部作用域时,跳过初始化。

3.寄存器变量

// 建议编译器将变量放在寄存器
// register只可用于自动变量,形参
register int x;
register char c;

在变量定义时,用register修饰,达到建议编译器将变量放置到寄存器的效果。声明为寄存器类型的变量不可获取变量地址.

4.初始化

默认初始化:
(1). 外部和静态变量将被初始化为0
(2). 自动和寄存器变量的初值则未定义.

显式初始化:
(1). 对外部和静态变量,初始化必须是常量表达式,初始化只执行一次。
(2). 对局部和寄存器变量,其初始化表达式不要求是常量表达式。
(3). 数组列表初始化时可自动推导数组容量,初始化值个数可比容量少,不可多。少时,剩余元素初始化为0
(4). 字符数组可用字符串来初始化。

5.#,##

(1). #使用示例

#define dprint(expr) printf(#expr " = %g\n", expr)
dprint(x/y) // printf("x/y" " = %g\n", x/y)->printf("x/y = %g\n", x/y)

#起到名字变为字符串作用

(2). ##使用示例

#define paste(front, back) front ## back
paste(name, 1)// name ## 1->name1

##起到黏合作用;##左边,右边的空格粘合后消失.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值