- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 数据
1.作用域
4种不同的作用域:文件作用域,函数作用域,代码块作用域和原型作用域。
1) 代码块作用域
位于一对花括号之间的所有语句称为一个代码块。任何在代码块的开始位置声明的标识符都具有代码作用域(block scope),表示它们可以被这个代码块中的所有语句访问。
但位于函数内,则变量的作用是从其声明处开始,到其函数结束为止。例子如下:
#includestdio.h
例1-1:
void fun()
{
int c=30;
printf(c=%d###,d=%d\n,c,d);
int d=40;
}
int main()
{
int a=10;
printf(a=%d###,b=%d\n,a,b);
int b=20;
// fun();
return 1;
}
以上编译,报错:
F:\test\scope\scope.cpp(7) : error C2065: d : undeclared identifier
F:\test\scope\scope.cpp(15) : error C2065: b : undeclared identifier
对于局部变量,如果声明时不赋初值,在编译时会报以下warning,但仍然可以编译通过。如例1-2:
例1-2:
int main()
{
int a;
printf(a=%d###d\n,a);
return 1;
}
编译提示如下:
warning C4700: local variable a used without having been initialized
声明于每个代码块的变量无法被另一个代码块访问,因为它们的作用域并无重叠之处。由于两个代码块的变量不可能同时存在,所以编译器可以把它们存储于同一个内存地址。这种共享并不会带来任何危害,因为在任何时刻,两面三刀个非嵌套的代码块最多只有一个处于活动状态。如例1-3:
例1-3:
int main()
{
if(0)
{
int a=10;
printf(a=%d###d\n,a);
}
else
{
int a=20;
printf(a=%d###d\n,a);
}
return 1;
}
编译正常通过,因为任何时刻,只有一个代码块处于活动状态。
2) 文件作用域
任何在所有代码块之外声明的标识符都具有文件作用域(file scope),它表示这些标识符从它们的声明之处直到它所在的源文件结尾处都是可以访问的。在文件中定义的函数名也具有文件作用域,因为函数名本身并不属于任何代码块。如例1-4中,a的作用域是从其声明之处,到文件结尾都是可以访问的,所以fun()函数可以访问a。但b的作用域则是在函数fun()之后才声明的,可以函数fun()是不可以访问b的。
例1-4:
int a;
void fun()
{
a=10
printf(a=%d###,b=%d\n,a,b);
}
int b=30;
int main()
{
fun();
return 1;
}
2.链接属性
一个程序的的各个源文件是分别被编译出来的,当各个源文件分别被编译出来之后,所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起。
标识符的链接属性(linkage)决定如何处理在不同文件中出现的标识符。标识符的作用域与它的链接属性有关,但这两个属性并不相同。
链接属性有3种----external(外部),internal(内部)和none(无)。
属于internal链接属性的标识符在同一个源文件内的(相同名字的标识符的)所有声明中,都指同一个实体,但位于不同源文件的多个(相同名字的标识符的)声明,则分属不同的实体。
属于external链接属性的标识符不论声明多少次,位于几个源文件都表示同一个实体。(所以,不能在多个源文件中,声明同一个相同名字的标识符。)
1)在任何一个源文件中声明一个变量,则这个变量的缺省情况下,其链接属性为external。
2)static关键字:如果某个声明在正常情况下,具有external链接属性,在它前面加上static关键字可以使它的链接属性变为internal,如:
static int var2
那么这个变量var2就将为这个源文件所私有。在其他源文件(fun1.cpp)中,如果也链接到一个叫做var2的变量,那么它(fun1.cpp)所引用的是另一个不同的变量。
例1-5:
打印结果如下所示:
可见,fun1.cpp与fun2.cpp中的var2为两个不同的实体。
2)extern关键字:它为一个标识符指定external链接属性,这样就可以访问在其他任何位置定义的这个实体(如:fun1.cpp
您可能关注的文档
- 第3章中国注册会计师职业道德守则..doc
- 第3章主体工程..doc
- 第3章习题+答案..doc
- 第3章企业市场调查与预测统计..doc
- 第3章会计电算化的工作环境测试题(吉林省专用)..doc
- 第3章会计科目与账户..doc
- 第3章作业(修改版)..doc
- 第3章作业(投资性房地产)..doc
- 第3章作业参考答案..docx
- 第3章信用风险管理..docx
- 2012-2021北京重点校高一(下)期中语文汇编:词类活用.pdf
- 电力市场与经济运行优化:电力市场优化算法_(28).电力市场中的市场力分析.docx
- 医院培训课件:《俯卧位通气的护理》.pptx
- 电力市场与经济运行优化:电力系统能效优化方法_(1).电力市场基础理论.docx
- 电力市场与经济运行优化:电力系统能效优化方法_(9).电力系统运行与能效优化.docx
- 电力市场与经济运行优化:电力系统能效优化方法_(15).电力市场与环境影响分析.docx
- 电力市场与经济运行优化:电力系统优化调度_(1).电力市场基础与原理.docx
- 电力市场与经济运行优化:电力系统优化调度_(14).电力市场改革政策与影响.docx
- 电力市场与经济运行优化:电力系统运行优化_(4).电力系统运行基础.docx
- 2025年航运行业分析.docx
文档评论(0)