结构作用域 结构成员名字的作用域为所在的结构-结构作用域。 struct A char name[10];//OK }: struct B char name[5];//OK } char name[20];//OK int main() Aa; Bb; ...a.name ./结构变量a的成员变量name。 b.name .. /结构变量b的成员变量name。 ..name .. /全局变量name
◼ 结构成员名字的作用域为所在的结构--结构作用域。 struct A { char name[10]; //OK }; struct B { char name[5]; //OK }; char name[20]; //OK int main() { A a; B b; ... a.name ... //结构变量a的成员变量name。 ... b.name ... //结构变量b的成员变量name。 ... name ... //全局变量name。 } 结构作用域
■ 在C++中,结构类型的名字可以与同一作用域中的 其它非结构类型标识符相同。例如,下面的用法是 合法的: struct A/结构类型A { ; intA;/整型变量A,OK,但不好! struct Aa;/定义一个结构类型A的变量a A=1;//把1赋值给整型变量A
◼ 在C++中,结构类型的名字可以与同一作用域中的 其它非结构类型标识符相同。例如,下面的用法是 合法的: struct A //结构类型A { ...... }; int A; //整型变量A,OK,但不好! ..... struct A a; //定义一个结构类型A的变量a A = 1; //把1赋值给整型变量A
文件作用域 文件作用域是指 。构成C++程序的某个模块 (源文件) ■以下标识符具有文件作用域: 在全局标识符的定义中加上static修饰符,则该全 局标识符的作用域就变成文件作用域。 。用const定义的全局常量名也具有文件作用域。 具有文件作用域的标识符只能在定义它们的源 文件(模块)中使用。 使用时,若该标识符的定义点在本源文件中使用 点之后,则在使用前需要声明它们
文件作用域 ◼ 文件作用域是指 • 构成C++程序的某个模块(源文件)。 ◼ 以下标识符具有文件作用域: • 在全局标识符的定义中加上static修饰符,则该全 局标识符的作用域就变成文件作用域。 • 用const定义的全局常量名也具有文件作用域。 ◼ 具有文件作用域的标识符只能在定义它们的源 文件(模块)中使用。 • 使用时,若该标识符的定义点在本源文件中使用 点之后,则在使用前需要声明它们
//file1.cpp //file2.cpp intx=0;/全局作用域 extern int x,y; static int y:=0;/文件作用域 extern const int z; extern void f(); const int z=0;/文件作用域 extern void g(); static void f()/文件作用域 void h() {.x,g(,h()../OK } ...y,z,f()...//Error void g() /链接时 ...x,y,z,f(),g(),h()...//OK
//file1.cpp int x=0; //全局作用域 static int y=0; //文件作用域 const int z=0; //文件作用域 static void f() //文件作用域 { ...... } void g() { ...x,y,z,f(),g(),h()... //OK } //file2.cpp extern int x,y; extern const int z; extern void f(); extern void g(); void h() { ... x,g(),h() ... //OK ... y,z,f() ... //Error //链接时 }
■一般情况下, 0 具有全局作用域的标识符主要用于标识被程序 各个模块共享的程序实体 具有文件作用域的标识符用于标识在一个模块 内部共享的程序实体
◼ 一般情况下, • 具有全局作用域的标识符主要用于标识被程序 各个模块共享的程序实体。 • 具有文件作用域的标识符用于标识在一个模块 内部共享的程序实体