局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
如delay(){int a;}
全局变量也称为外部变量,它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序 .c文件。其作用域是整个源程序 所有.c文件
<p><span style="color: rgb(255, 0, 255); background-color: rgb(153, 153, 153);">extern的用法有些混乱,不去细究什么时候对,什么时候错,不同编译器都可能不一样,下面是一定对的用法:</span></p><p><span style="color: rgb(255, 0, 255); background-color: rgb(153, 153, 153);">1.一个工程只有一个c文件,全局变量定义在程序最前 [extern]int a=0,b=0;</span></p><p><span style="color: rgb(255, 0, 255); background-color: rgb(153, 153, 153);">2.一个工程包含多个c文件,全局变量的定义用int a=0;或int a; 声明用 extern int a ;</span></p><p><span style="color: rgb(255, 0, 255); background-color: rgb(153, 153, 153);"><span style="font-family:Adobe 黑体 Std R;">一般都是在</span> . h文件里写好,通过ifdefine 使得一个c文件里是定义,其他c文件里是声明,避免重复定义,而全局变量作用域是所有c文件,但其他c要用要声明</span></p><p><span style="background-color: rgb(153, 153, 153);"><span style="font-family:Adobe 黑体 Std R;">如下所示:</span> #ifdef OS_GLOBALS</span></p><p><span style="background-color: rgb(153, 153, 153);">#define OS_EXT</span></p><p><span style="background-color: rgb(153, 153, 153);">#else</span></p><p><span style="background-color: rgb(153, 153, 153);">#define OS_EXT extern</span></p><p><span style="background-color: rgb(153, 153, 153);">#endif</span></p><p><span style="color: rgb(255, 0, 255); background-color: rgb(153, 153, 153);">OS_EXT INT32U OSIdleRun;</span></p><p><span style="background-color: rgb(153, 153, 153);"><span style="color:rgb(255,0,255);"><span style="font-family:Adobe 黑体 Std R;">定义是</span> OS_EXT被设置为空 ===> </span><span style="color:rgb(255,0,255);">INT32U OSIdleRun;</span></span></p><p><span style="background-color: rgb(153, 153, 153);"><span style="color:rgb(255,0,255);"><span style="font-family:Adobe 黑体 Std R;">说明是</span> </span><span style="color:rgb(255,0,255);">OS_EXT被设置为extern ===> </span><span style="color:rgb(255,0,255);">extern INT32U OSIdleRun;</span></span></p>
extern int i; 定义
Function()
{
i=0;
}常见用法
extern int i;声明
Function()
{
extern int i;定义
i=0;
}太费事不用