大程序

大程序

多个.c文件

  • main()里的代码太长了适合分成几个函数
  • 一个源代码文件太长了适合分成几个文件
  • 两个独立的源代码文件不能编译形成可执行的程序
//main.c
#include<stdio.h>
int max(int a, int b);

int main(int argc, char const *argv[])
{
    int a = 5;
    int b = 6;
    printf("%d\n", max(a,b));
    
    return 0;
}
//max.c
int max(int a, int b)
{
    return a>b?a:b;
}
6

项目

  • 在Dev C++中新建一个项目,然后把几个源代码文件加进去
  • 对于项目,Dev C++的编译会把一个项目中的源代码文件都变异后,连接起来
  • 有的IDE有分开的编译和构建两个按钮,前者是对单个源代码编译,后者是对整个项目做连接

编译单元

  • 一个.c文件是一个编译单元
  • 编译器每次编译只处理一个编译单元

头文件

  • 把函数的原型放入到一个头文件(以.h结尾)中,在需要调用这个函数的源代码文件(.c文件)中#include这个头文件,就能让编译器在编译的时候知道函数的原型
//main.c
#include<stdio.h>
#include"max.h"

//int max(int a, int b);

int main(int argc, char const *argv[])
{
    int a = 5;
    int b = 6;
    printf("%d\n", max(a,b));
    
    return 0;
}
//max.c
#include"max.h"

int max(int a, int b)
{
    return a>b?a:b;
}
//max.h
int max(int a, int b);

#include

  • include是一个编译预处理指令,和宏一样,在编译之前就处理了

  • 它把那个文件的全部文本内容原封不动地插入到它所在的地方
    • 所以也不一定要在.c文件的最前面#include

“”还是<>

  • include有两种形式来指出要插入的文件

    • “”要求编译器首先在当前目录(.c文件所在的目录)寻找这个文件,如果没有,到编译器指定的目录去找
    • <>让编译器只在指定的目录去找
  • 编译器自己知道自己的表中库的头文件在哪里

  • 环境变量和编译器命令行参数也可以指定头文件的目录

#include的误区

  • include不是用来引入库的

  • stdio.h里只有printf的原型,printf的代码在另外的地方,某个.lib(windows)或**.a(Unix)中
  • 现在的C语言比一起默认会引入所有的标准库
  • include<stdio.h>只是为了让他编译器知道printf函数的原型,保证你调用时给出的参数值是正确的类型

头文件

  • 在使用和定义这个函数的地方都应该#include这个头文件
  • 一般的做法就是任何.c都有对应的同名的.h,把所有对外公开的函数的原型和全局变量的生命都放进去

不对外公开的函数

  • 在函数前面加static就使得它成为只能在所在的编译单元中被使用的函数
  • 在全局变量前面加上static就使得它成为只能在所在的编译单元中被使用的全局变量
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容