C语言编程:存储类、库函数修改与条件编译详解
1. 存储类概述
C语言中有五种存储类,目前我们已经了解了其中三种。函数的形式参数和局部变量属于自动存储类(auto),当函数被调用时,这些变量会自动在栈上分配空间,函数返回时则自动释放。其作用域从声明点开始,到声明所在函数的结束处为止。
函数名本身属于外部存储类(extern),这意味着它们可被链接器使用。若函数原型位于函数定义之前,那么程序中的其他函数就可以调用这些函数。编译器在翻译函数调用时,需要知道函数的返回类型、参数数量以及参数的数据类型,而外部原型声明的作用就是提供这些信息。不过,这种声明并不会创建一个外部存储类的函数,它只是告知编译器该函数存在,链接器会知道在哪里找到它。
下面是一个展示自动和外部存储类的示例代码:
void
fun_one (int arg_one, int arg_two)
{
int one_local;
...
}
int
fun_two (int a2_one, int a2_two)
{
int local_var;
...
}
int
main (void)
{
int num;
...
}
在这个示例中,彩色显示的名称属于自动存储类,加粗的黑色名称属于外部存储类。程序的顶层部分,外部存储类是所有在此级别声明的名称的默认存储类。
2. 全局变量
在程序的顶层,我们通常看到的是函数声明,但也可以声明变量(尽管通常不建议这么做)。这种变量的作用域从声明点开始,到源文件的末尾