Linux C 多文件编程

来源:互联网 发布:淘宝可以货到付款吗? 编辑:程序博客网 时间:2024/05/19 02:24

学了很久的C语言,很多程序还是只有一个main.c,而不懂得如何多文件编程。


常见的程序由多个源文件组成,通常还有一些头文件。源文件包含函数的定义和外部变量,而头文件包含可以在源文件之间共享的信息。

  • 源文件

事实上,可以将程序分割成任意数量的源文件。根据惯例,源文件的扩展名必须为.c,其中一个源文件必须是main.c,作为程序的起点

分割函数时,把相关的函数和变量分组放到同一个文件中。

  • 头文件

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

  • #include 

#include <file.h>   //C语言自身库头问价

#include “file.h”  //所有的其他头文件和自己编写的头文件

两者区别在于后者会先搜寻当前目录,然后搜寻系统头文件所在目录。
所以不能把自己定义的头文件用尖括号括起来,这样编译器会直接搜寻系统文件所在目录,显然是找不到头文件的。

#include “/myfiles/file.h”   //可以帮助定位头文件

  • 可移植性技巧

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



  • 共享函数原型


  1. #include<stdio.h>  
  2. #include<stdlib.h>  

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

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


可以写成一个main.c / stack.c / stack.h

stack.c

#include “stack.h”

void func1()
{
     printf(“我是函数1\n”);
}
void func2()
{
     printf(“我是函数2\n”);
}
void func3()
{
     printf(“我是函数3\n”);
}

stack.h

void func1();
void func2();
void func3();

main.c

#include <stdio.h>
#include <stdlib.h>
#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