翻译单元、内部链接、外部链接
翻译单元:.c文件和.c文件内的.h文件总和,不包括和.h同名的.c文件;
内部链接:static限定的文件作用域变量为内部链接,只可扩展到.c文件包含的.h文件内,不能扩展到.h文件同名的.c文件内。
外部链接:正常的具有文件作用域的变量,即未用任何关键字限定的全部变量;
例:
main.c :
#include<stdio.h> #include "test1.h" static int a=3; void main(void) { ian(a); return 0; }
test1.h :
#ifndef TEST1_H
#define TEST1_H
void ian(int);
#endif
test1.c :
#include<stdio.h>
#include "test1.h"
void ian(int a)
{
printf("a=%d\n",a);
}
编译正确;
若main.c里改为ian(); test1.h改为 void ian(void); test1.c改为:
void ian(void)
{
extern int a;
printf("a=%d\n",a);
}
编译报错,提示a未定义,因为static限定了a,为内部链接,只能扩展到test1.h里,不能扩展到test1.c里;将static去掉则编译正确,此时a为外部链接,可以扩展到test1翻译单元;

浙公网安备 33010602011771号