C 语言 - 作用域

  1. 作用域:程序中可以访问的一个标识符的一个或多个区域。
  2. 分类:
    a. 代码块作用域 block scope
    b. 函数原型作用域 function prototype scope
    c. 文件作用域 file scope
    d. 函数作用域 function scope
  3. 代码块作用域 block scope
    一个代码块是指包含在一对花括号之内的一段代码(可嵌套)。在代码块中定义的变量具有代码块作用域,变量从被定义处到包含该定义的代码块末尾均可见。
    1)整个函数体是一个代码块:
void swap(double &d1, double &d2) {
	double dtmp = d1;
	d1 = d2;
	d2 = dtmp;
}

a. dtmp 具有代码块作用域;
b. 函数的形参也具有代码块作用域,比如上面例子中的 d1d2
2)函数内任一复合语句是一个代码块:

void display(char c, int itimes) {
	for (int i = 0; i < itimes; ++i)
		printf("%c\n", c);
}

上面例子中 for 循环是一个代码块,变量 i 具有代码块作用域。
4. 函数原型作用域 function prototype scope
函数原型作用域适用于函数原型中使用的变量名。
a. 通常情况下,函数原型中只关心形参的类型,名字无关紧要甚至可以忽略;
b. 函数原型中名字起作用的一种情形是变长数组的参数:

void use_a_VLA(int irow, int icol, iarr[irow][icol]);
  1. 文件作用域 file scope
    一个定义在所有函数之外的变量具有文件作用域。该变量从挑定义处到包含该定义的文件的结尾处均可见。
    文件作用域变量即全局变量(global variable)。
  2. 函数作用域域 function scope
    注意区别于函数原型作用域。C 语言中的函数作用域只适用于 goto 语句使用的标签,一个函数中的 goto 标签在该函数中的任意地方可见,与标签出现的位置无关(区别于代码块作用域)。

你可能感兴趣的:(C语言,c语言,开发语言)