翻译单元、内部链接、外部链接

翻译单元:.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翻译单元;

 

posted @ 2020-09-06 19:33  tisug  阅读(99)  评论(0)    收藏  举报