Linux C 多文件编程

2019-07-12 23:21发布

学了很久的C语言,很多程序还是只有一个main.c,而不懂得如何多文件编程。
常见的程序由多个源文件组成,通常还有一些头文件。源文件包含函数的定义和外部变量,而头文件包含可以在源文件之间共享的信息。
  • 源文件

事实上,可以将程序分割成任意数量的源文件。根据惯例,源文件的扩展名必须为.c,其中一个源文件必须是main.c,作为程序的起点
分割函数时,把相关的函数和变量分组放到同一个文件中。
  • 头文件

#include 使得在任意数量的源文件中共享一个宏定义或类型定义成为可能。它会通知预处理器打开指定的文件,并且把它插入到当前文件中。
  • #include 

#include   //C语言自身库头问价
#include “file.h”  //所有的其他头文件和自己编写的头文件
两者区别在于后者会先搜寻当前目录,然后搜寻系统头文件所在目录。所以不能把自己定义的头文件用尖括号括起来,这样编译器会直接搜寻系统文件所在目录,显然是找不到头文件的。
#include “/myfiles/file.h”   //可以帮助定位头文件
  • 可移植性技巧

通常最好的做法是不要在#include 指令中包含路径或者驱动器的信息。不然当需要移植到其他电脑甚至是其他系统时,编译会变得很困难。


  • 共享函数原型


  1. #include  
  2. #include  

  3. void func1();     //函数声明  
  4. void func2();     //函数声明  
  5. void func3();     //函数声明  

  6. int main()  
  7. {  
  8.     printf(”hello world! ”);  
  9.     func1();  
  10.     func2();  
  11.     func3();   
  12.     system(”pause”);  
  13.     return 0;  
  14. }   
  1. //函数实现  
  2. void func1()   
  3. {  
  4.      printf(”我是函数1 ”);  
  5.  }  
  6. void func2()  
  7. {  
  8.      printf(”我是函数2 ”);   
  9.  }   
  10. void func3()  
  11. {  
  12.      printf(”我是函数3 ”);   
  13.      }   


可以写成一个main.c / stack.c / stack.h
stack.c
#include “stack.h”
void func1(){     printf(“我是函数1 ”);}void func2(){     printf(“我是函数2 ”);}void func3(){     printf(“我是函数3 ”);}
stack.h
void func1();void func2();void func3();
main.c
#include #include #include “stack.h”
int main(int argc, char *argv[]){     func1();     func2();     func3();     system(“pause”);          return 0;}
其中,stack.h还可以写成另一种形式
#ifndef STACK_H          //使用 #ifndef / #endif 来封闭文件的内容,这样可以保护头文件stack.h#define STACK_H
void func1();void func2();void func3();
#endif STACK_H