代码块作用域
#include
<
stdio.h
>
int main()
... ... {
int main_scop=0;
for(int i=0;i<2;i++)
......{
int for_scop=1;
}
for_scop +=1; //for_scop : undeclared identifier
printf("for_scop : %d ",for_scop);
return 0;
}
int main()
... ... {
int main_scop=0;
for(int i=0;i<2;i++)
......{
int for_scop=1;
}
for_scop +=1; //for_scop : undeclared identifier
printf("for_scop : %d ",for_scop);
return 0;
}
想要能使用for_scop的话,只要让for_scop在main函数体中声明,而不是在for复合语句块中定义.
文件作用域
#include
<
stdio.h
>
void MyPrint( void )
... ... {
printf("main_scop : %d ",main_scop); //main_scop' : undeclared identifier
}
int main()
... ... {
int main_scop=0;
for(int i=0;i<2;i++)
......{
int for_scop=1;
}
MyPrint();
return 0;
}
void MyPrint( void )
... ... {
printf("main_scop : %d ",main_scop); //main_scop' : undeclared identifier
}
int main()
... ... {
int main_scop=0;
for(int i=0;i<2;i++)
......{
int for_scop=1;
}
MyPrint();
return 0;
}
因为main_scop在main函数中作用,在MyPrint中不作用,想要使用他,可以将他声明成文件作用域,也就是通常说的
全局变量,或者使用参数来传递,是函数与函数间交流
全局变量代码如下:
#include
<
stdio.h
>
/**/ /**/ /**/ //
// global variable
int file_scop;
/**/ /**/ /**/ //
void MyPrint( void )... ... {
printf("main_scop : %d ",file_scop);
}
int main()... ... {
file_scop=0;
for(int i=0;i<2;i++)......{
int for_scop=1;
}
MyPrint();
return 0;
}
/**/ /**/ /**/ //
// global variable
int file_scop;
/**/ /**/ /**/ //
void MyPrint( void )... ... {
printf("main_scop : %d ",file_scop);
}
int main()... ... {
file_scop=0;
for(int i=0;i<2;i++)......{
int for_scop=1;
}
MyPrint();
return 0;
}
参数传递代码:
#include
<
stdio.h
>
void MyPrintHelp( int n)
... ... {
printf("main_scop : %d ",n);
}
int main()
... ... {
int main_scop=0;
for(int i=0;i<2;i++)
......{
int for_scop=1;
}
MyPrintHelp(main_scop);
return 0;
}
void MyPrintHelp( int n)
... ... {
printf("main_scop : %d ",n);
}
int main()
... ... {
int main_scop=0;
for(int i=0;i<2;i++)
......{
int for_scop=1;
}
MyPrintHelp(main_scop);
return 0;
}
可见函数参数可以虚拟的扩大变量的作用域,如果一个函数的参数已经固定,你可以在为他添加一个帮助函数,使他的
一部分参数和固定的函数参数一样,另一部分是要扩大范围的变量的虚拟代表!推荐使用,避免使用全局变量!
第一个代码块作用域的例子也可以用函数参数来延续for_scop的作用域