引言:
链接属性:标识符的连接属性决定如何处理在不同文件中出现的标识符。标识符的连接属性共有3种--external, internal 和 none. none属性胡标识符总是被当作单独的个体;internal 属性的标识符在同一个源文件内的所有声明都指向同一个实体,但位于不同源文件的多个声明则分属于不同的实体;external 属性的标识符不论声明多少次,位于几个源文件都表示同一个实体。注意:不同环境下标识符的缺省链接属性是不同的。
重点:
关键字 static 和 extern用于在声明中修改标识符胡链接属性。如果某个变量在正常情况下具有external链接属性,在它前面加static,可以使它的链接属性变为internal。
下面通过代码证明:
//file1.h
#include <stdio.h>
//int var = 11;
//static int svar = 22;
void func();
/*
static void sfunc()//头文件中如果包含静态函数,则必须给出实现,否则编译报错
{
printf("private func in file1.h");
}*/
//file1.c
#include "file1.h"
int var = 1;
static int svar = 2;
void func()
{
printf("external func\n");
}
static void sfunc()
{
printf("private func\n");
}
//main.c
#include <stdio.h>
#include "file1.h"
int main()
{
extern int var;
printf("var in file1 equals %d\n",var); //正常输出
extern int svar;
//printf("svar in file1 equals %d\n", svar);//链接时报错
//要想实现变量私有化,必须在源文件内定义不能在头文件内定义
extern void func();
func(); //正常输出
extern void sfunc();//链接时报错
//sfunc();
return 0;
}
本文主要出自 《C 和 指针》