精华内容
下载资源
问答
  • C语言实现连接多个文件

    千次阅读 2010-09-16 18:49:00
    C语言实现连接多个文件  

    一步步记录自己的成长,在DVE-C++下编译通过

     

     

    展开全文
  • 解决多个C文件包含同一头文件引起的文件重复包含问题,并给出全局变量如何定义和声明的方法. 解决方法: 1. 定义公共文件: global.c 和global.h 其中, global.c文件中: #include "global.h" //...

    解决多个C文件包含同一头文件引起的文件重复包含问题,并给出全局变量如何定义和声明的方法.

    解决方法:

    1. 定义公共文件:

    global.c 和global.h

    其中,

    global.c文件中:

    #include "global.h"
    
    //定义全局变量
    int global_num1,global_num2;
    
    //定义函数
    int func(int input1 ,int input2)
    {
        int output;
        output = input1+input2;
        return ouput;
    }

    global.h文件中:

    #ifndef _GLOBAL_H
    #define _GLOBAL_H
    
    //声明在global.c中定义的变量
    extern int global_num1,global_num2;
    
    //声明函数
    int func(int input1, int input2);
    
    #endif

    2. 其他文件引用

    假设有文件 test1.c 和 test2.c,在该两个文件中需要使用定义在 global.c 中的变量和函数,只需在 test1.c 和 test2.c中包含头文件global.h 并声明 global_num1 和 global_num2即可 ;

    test1.c :

    #include "test1.h"
    #include "global.h"
    
    //定义全局变量
    extern int global_num1,global_num2;
    

    test2.c :

    #include "test2.h"
    #include "global.h"
    
    //定义全局变量
    extern int global_num1,global_num2;
    

    这样,就不会出现文件重复包含问题,代码看起来也很规整。

     

     

    展开全文
  • C语言-GCC编译多个C文件

    千次阅读 2018-02-26 11:24:37
    20180207-GCC编译多个C文件GCC编译多个C文件 下午做了一个小的程序,定义了三个文件:getop.h,getop.c,calcDemo.c 显然getop.h是针对getop.c的,而在calcDemo.c中要调用到getop.c中的东西。 首先给出每个文件的...

    20180207-GCC编译多个C文件

    GCC编译多个C文件

     

    下午做了一个小的程序,定义了三个文件:getop.h,getop.c,calcDemo.c

     

    显然getop.h是针对getop.c的,而在calcDemo.c中要调用到getop.c中的东西。

     

    首先给出每个文件的结构图,为了更简单的说明,函数都空实现。

     

    getop.h:

     

    #ifndef _H_GETOP

    #define _H_GETOP

     intgetch(void);

     voidungetch(int c);

     intgetop(char s[]);

    #endif

     

    getop.c

     

     

     

    #include <stdio.h>

    #include <ctype.h>

    #define NUMBER '0'

    int getch(void);

    void ungetch(int);

     

     

    int getop(char s[])

    {

     return 0;

     

    }

     

    #define BUFSIZE 100

    char buf[BUFSIZE];

    int bufp =0;

     

    int getch(void)

    {

      return 0;

    }

     

    void ungetch(int c)

    {

     

    }

     

    calcDemo.c

     

    #include <stdio.h>

    #include <stdlib.h>

    #include "getop.h" //只需这样引用即可

     

     

     

    最后,即是利用gcc来编译这几个文件:

     

    gcc getop.c calcDemo.c -o output.out

     

    编译后的目标文件即为:output.out

     

    然后执行:./output.out即可


    展开全文
  • c语言多个.c文件编译以及操作

    千次阅读 2021-01-13 00:08:56
    多个.c文件 头文件 声明 下一篇: 多个.c文件 一、why? main()里的代码太长了适合分成几个函数 一个源码文件太长了适合分成几个文件 两个独立的源代码文件不能编译形成可执行的程序 二、如何将多个.c...

    目录

    多个.c文件

    一、why?

    二、如何将多个.c组合成一个?

    三、示例

    头文件

    一、引入

    二、需要一个媒介——头文件,才能知道函数到底要什么,又返回什么

    三、关于#include

    四、include的两种形式<> 还是""

    五、#include的误区

    声明

    一、问题,我们在max.c里面声明的一个全局变量gAll怎么让main.c也知道有这个全局变量呢?

    二、关于重复声明

    下一篇:c语言格式化的输入输出 


    多个.c文件

    一、why?

    main()里的代码太长了适合分成几个函数

    一个源码文件太长了适合分成几个文件

    两个独立的源代码文件不能编译形成可执行的程序

     

    二、如何将多个.c组合成一个?

    需要使用编译器新建项目,然后把源代码放进去,编译器会把项目中所有的源代码编译后,链接起来

    编译器有编译和构建,编译指对单个源码进行编译,后者是对整个项目做链接

     

    编译单元:一个.c是一个编译单元,编译器每次编译只能处理一个编译单元

     

    三、示例

    两个文件

    max.c的内容

    int max(int a,int b)

    {

     return a>b?a:b;

    }

    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));

    }

    结果

     

    头文件

    一、引入

    在上一章中

    我们在main.c中留下了max函数的声明

    在调用的时候,编译器知道我们对max函数的调用是正确的

    但我们把声明去掉后?

    虽然有红色提示但是还是能编译

    还有结果

    这是因为c语言古老的传统,会猜测max的参数全是int

    假如我们把max.c的int类型改为double还能成功吗?

    double max(double a,double b)

    {

     return a>b?a:b;

    }

    但是编译又过了,但是里面肯定有问题

    结果:

    在mian.c和max.c都编译完成后

    main中调用max.c的时候会链接max.c,可是传进去的东西错了,传出来的也错了

     

    二、需要一个媒介——头文件,才能知道函数到底要什么,又返回什么

    把函数原型放到一个头文件以.h结尾,在需要调用这个函数的源码文件.c中#include这个头文件,就能让编译器在编译的时候知道函数的原型

     

    会发现这里就报错了,因为需要的是double类型传入的是int

    将max函数改为int类型后运行正常

    当然将%d改为%f,max函数类型是double也没问题

     

    三、关于#include

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

    它把那个文件的全部文本内容原封不动地插入到它所在的地方

    所以也不是一定要在.c文件的最前面#include

     

    现在我们用gcc看编译过程

    gcc main.c max.h

    使用gcc编译链接

    执行成功

    现在只编译main.c   gcc --save-temps main.c -c

    查看main.i tail -n 50 main.i

    所以include就是把max.c整个放了进来,注意这里的#是注释

     

    四、include的两种形式<> 还是""

    ""要求编译器首先在当前目录(.c文件所在的目录)寻找这个文件,如果没有,到编译器指定的目录去找

    <>让编译器只在指定的目录去找

    编译器自己知道自己的标准库的头文件在哪里

    linux和unix的库在这里

    windows的在各种编译器下面的include里面

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

    小结:一般来说自己写的用"",系统的用<>

     

    看看stdio.h里面有什么?开始是版权声明,后面就是各种东西的定义

     

    五、#include的误区

    #include不是用来引入库的,做的只有一件事把这个文件原封不动的放进来

    stdio.h里面只有printf的原型,printf的代码在另外的地方,某个.lib(Windows下)或.a(Unix)中

    现在c语言的编译器默认会引入所有的标准库,当然用不到的会拿掉

    #include<stdio.h>只是为了让编译器知道printf函数的原型,保证你调用时给出的参数值是正确的类型

     

    所以说头文件:

    在使用和定义(检查你对外宣称的和实际的函数的定义是不是一不一致)这个函数的地方都应该#include这个头文件

    一般的做法就是任何.c都有对应的同名.h,把所有对外公开的函数的原型和全局变量(全局变量可以在多个.c中共享)的声明都放进去

    那么要是有个函数不希望别人用?

    在函数前面叫上static就使得它成为只能在所在的编译单元中被使用的函数

    在全局变量前面加上static就使得它成为只能在编译单元(这个.c)中被使用的全局变量

     

    较为推荐的头文件使用方式:

    这里的max.c是max函数的原型,max.h是声明

     

     

     

    声明

    一、问题,我们在max.c里面声明的一个全局变量gAll怎么让main.c也知道有这个全局变量呢?

    在max.h中声明

    int max(int a, int b);

    extern int gAll;

    这样做后,我们告诉编译器在整个项目的某个地方有个叫gAll的东西

    就可以在main函数中这么做了

     printf("%d\n",max(a,gAll));

    结果:

    但是没有这条声明编译就会报错

     

    int I;是变量的定义

    extern int i;是变量的声明,当然不能赋值,定义是定义声明是声明,不能搞混

    声明是不产生代码的东西(就是只是默默的记下来)

    函数原型

    变量声明

    结构声明

    宏声明

    枚举声明

    类型声明

    inline函数

    而定义是产生代码的东西(函数、全局变量)

     

    一个规则:只有声明可以被放在头文件中

    是规则不是法律

    否则会造成一个项目中多个编译单元有重名的实体

    某些编译器允许几个编译单元中存在同名的函数,或者用weak修饰符来强调这种存在

     

    二、关于重复声明

    同一个编译单元里,同名的结构不能被重复声明

    如果你的头文件里有结构的声明,很难这个头文件不会在一个编译单元里被#include多次

    所以需要“标准头文件结构”

    例如:

    struct Node

    {

        int value;

        char* name;

    };

    struct Node

    {

        int value;

        char* name;

    };

    int main(int argc,char const *argv[]){

    在一个main中定义两个同名的Node结构就会导致编译报错

    当然我们把这个结构放入max.h中只用include就能用这个结构了

    这时我们有另一个.h文件

    也include了max.h,这是很常见的事情,可能有某个结构什么的要用到

    我们同时也在main.c里面include了main.h

    就相当于将max.h插入到main.c里面两遍,就产生了前面的问题,重复定义了两次Node

    当程序结构很复杂的时候很难避免这样的事情

     

    所以我们这么做

    在max.h里面加入橙色的部分

    #ifndef _MAX_H_  //判断该文件内有没有定义过这个宏

    #define _MAX_H_  //若没有则定义

    int max(int a, int b);

    extern int gAll;

    struct Node

    {

        int value;

        char* name;

    };

    #endif // !_MAX_H_   结束  如果已经定义过这个宏就不会放入绿色部分的代码

    注意:这种宏的定义的名字最好要加_ _保证和要用到的宏不重名

    用这个机制,保证只引入过一次max.h

    现在编译就对了

    #include <stdio.h>

    #include"max.h"

    #include"main.h"

    int main(int argc,char const *argv[]){

        int a=5;

        int b=6;

        printf("%d\n",max(a,gAll));

        return 0;

    }

     

    #pragma once 也能起到同样的作用,但是不是所有编译器都支持,例如gcc

    展开全文
  • c语言多个c文件调用同一函数

    千次阅读 2020-02-09 15:44:08
    已知:将函数定义放在一func.c文件中。 func1(){} func2(){} func3(){} 方法1:main.c中直接包含func.c//该方法不好,因为无法在另一.c文件中再#include "func.c",会导致函数二次定义。 #include "func.c" ...
  • 大家应该都知道,C语言定义的变量的作用范围是从定义的位置起,到特定... 那么,进入正题了,C语言所谓的全局变量在多个.c文件中到底该怎样使用? 首先说一下全局变量的特性: 全局变量可以定义在一个.c文件中,...
  • C语言多文件编译、连接和运行

    千次阅读 2019-01-30 07:00:35
    C语言多文件编译、连接和运行: 1.编写外部函数对应的头文件: file2.c–&gt;file2.h, file3.c–&gt;file3.h, file4.c–&gt;file4.h, 把这些文件与主程序file1.c放在同一文件夹下。 file2.h void ...
  • C语言基于socket的文件传输(可循环发送多个文件)

    万次阅读 多人点赞 2018-07-10 10:32:57
    这是因为文件可能比较大,一缓冲数组只能保存一部分文件内容,因此服务器得不断从文件中读取内容并发给客户端,而客户端得不停的循环接收。但是在事先,得将相应要发送的文件(照片,音频,视频等)保存在服务器相应...
  • c语言多文件编程,即main文件调用其他.c文件的方法。 两种方法的区别就是,gcc编译时,是否加b.c文件,不加的话,就在a.c文件里面,加#include "b.c" 至于extern 那一句,是否添加,编译都是可以通过的,...
  • 关键:区分变量定义和变量定义。...//第一个文件main.c #include <stdio.h> extern int a; //全局变量声明 int main(){ printf("%d\n",a+1); } //另一个文件sub.c int a=3; //变量定义 运行结果: ...
  • C语言基础之多个源代码文件

    千次阅读 2020-09-18 20:46:23
    多个.c文件 ◆ main()里的代码太长了适合分成几个函数 ◆ 一个源代码文件太长了适合分成几个文件 ◆ 两个独立的源代码文件不能编译形成可执行的程序 【例】 新建一个项目,添加pj1.c和max.c文件,两个文件...
  • gcc编译多个c文件

    万次阅读 2014-09-30 09:55:38
    多个源文件: main.c: #include #include "hello.h" int main() { hello(); return 0; } hello.h: void hello(); hello.c: #include #include "hello.h" void hello() ...
  • C语言多文件操作

    千次阅读 2018-01-08 19:51:54
    为什么需要多文件项目(1)真正的C语言项目是很复杂的,包含很多个函数,写在一个文件中不利于查找、组织、识别。所以人为的将复杂项目中的很多函数分成了不同的功能模块,然后分开放在不同的.c文件中,于是乎有了多...
  • C语言】【unix c】如何将多个源文件拼接成一个可执行文件
  • C程序设计》运行系统,利用文件原理实现了一个C语言文件引用其他C语言文件,通过main函数来调用其他C语言文件里面的函数,通过这项目可以理解C语言中一主函数.c 文件是如何调用其他C程序.c 文件的,可以掌控...
  • 网上很多有关socket文件传输的源码都是每次只能发送一个文件,如果想传输多个文件,不但需要多次交互,还需要把每个文件的文件名都输入进去,很不方便,所以进行了一个小扩展:即客户端可以将打算传送的多个文件都先...
  • #在Linux命令行中判断多个文件或目录是否存在 Linux命令行中判断多个文件或目录是否存在 制作一个小程序,实现查看文件/目录/文件路径是否存在,并且能 够同时判断多个。 Linux C语言程序 命令行输入 显示结果 ...
  • 作用:将多个源文件通过一个makefile文件进行编译生成多个可执行文件。 环境:Vmware Workstation;CentOS-6.4-x86_64 图解说明: 1、创建并编辑文件main1.c: #include int main() { printf("main1\n"); ...
  • C语言之在多个文件中声明外部变量

    千次阅读 2019-07-24 16:15:56
    版权声明:本文为博主原创文章,未经博主允许不得转载。... 问题: 用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后...具体说就是在其中一个c文件中定义一个全局变量key...
  • 今天被同学问到如何一次性读取多个文件,当时第一反应就是将所有文件的文件名存入一个字符串数组里,然后依次读。但是同学把文件发给我看的时候,发现竟然有360个文件,当时愕然。结合网上搜索得到的资料,再加上...
  • C语言实现创建N个文件,并对文件中写入想要的内容。
  • 在一较大的项目中,如果将全部的代码放在一个文件中,会让这个文件十分长,有时候你写到后面就忘了前面写了什么,有什么函数,函数需要什么参数。还不容易查看代码。因此如果你将每一函数都放在一独立的文件中...
  • C语言 多文件程序

    千次阅读 2018-03-09 11:13:43
    在一个单独的目录中编写一个大型程序,行程一个.h和.c文件集,每个.c文件含有一个或多个函数定义.按需要重新编译每个.c文件,这样可节省时间. 假设我们正在开发一个pgm的大程序,在每一个.c文件的头部都含有一条 #...
  • C语言多个文件组织(include)的原理

    千次阅读 2017-11-16 17:46:30
    大学刚学C的时候,老师教的第一个C程序是打印出一个helloword字样,并告诉我们,要使用printf这个东西,C文件开头需要加上一句: #include"stdio.h" 这个语句是实现了什么动作? 后来学到C++,好像老师还是同学...
  • Dev-C++同时编译多个C或C++文件

    千次阅读 2017-09-05 17:21:37
    Dev-C++同时编译多个C文件:  考察多源代码文件程序的编译及头文件的使用 :  如果程序的函数 分别放在不同的程序之中,那就必须是定义常量的#define指令对于每个文件都可用:  定义一个***.h文件,存储函数...
  • c语言文件操作

    千次阅读 多人点赞 2018-12-21 09:26:46
    C语言文件处理功能,大体上分为两种:一种是设置缓冲区,另一种是不设置缓冲区。因为不设置缓冲区的方法直接对磁盘进行操作,速度较慢,并且由于不是C的标准函数,跨平台操作时容易出问题。本文只介绍设置缓冲区的...
  • 11.C进阶之多文件C语言项目

    千次阅读 2016-03-12 20:56:05
    11.1.为什么需要多文件项目 11.2.跨文件调用函数 11.3.跨文件引用全局变量 11.4.跨文件使用函数和变量总结 11.5.头文件的引入
  • 我们通常在完成一程序时,往往习惯将程序写为多文件的,这样就能实现程序的模块化管理,以及分工开发合作。而一些全局变量,全局函数,结构体等就能使各模块联系在一起。  在平常大家写代码的过程中,通常会使用...
  • C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一全局变量,然后包含到两不同的c文件中,希望这全局变量能在两个文件中共用。 举例说明:项目文件夹project下有main.c、common.c和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,070,933
精华内容 1,228,373
关键字:

多个c文件怎么连接