GCC编译多个c文件

原文地址:http://blog.sina.com.cn/s/blog_533074eb01012ti8.html

 

评:

今天看了《C++ GUI Qt4编程》,发现附录D对C/C++框架的.c和.h文件构架分析得非常透彻,把以前含糊的理解都理清了,以前只知道how,但不知道why,现在不仅知道了why,还理解了you have to obey it because it is the best solution for any code。特别是理解了,函数实现一定不能放在.h文件,以前一直以为可以,因为在.h文件中加入预处理保证.h只被包含一次也不会报错,但是这也意味着函数实现不能包含到代码里了,而且.h文件包含关系复杂后,你自己根本不知道哪些包含.h的地方包含着函数实现哪些又没有包含,对于没有包含函数实现的.c文件,你要是直接调用这些函数编译器就提示undefined...——因此,最好的解决方案就是一定把函数实现放在其它.c文件中,在需要调用函数的地方用包含带有函数原型的.h文件(不是extern关键字,这个是用给变量的,呵呵)即可,这个界线我称为C/C++预言的永恒界线。相当于利用函数原型这个桥梁,从一个.c文件调用另一个.c文件的函数,这个思路很简单,剩下的是编译器的问题了,在windows下的IDE环境里,直接一个按钮就编译了工程中的所有.c文件,让我彻底变成了傻瓜,通过下面这篇文章,终于知道了gcc是怎么轻松地实现从一个.c文件调用另一个.c文件(即在编译语句里把这两个.c文件关系起来),其实只要用gcc同时处理两个.c文件即可,说来好笑,这么简单的方式,以前搞Linux时竟然从来没用过,一直都是gcc只处理一个.c文件的,有的时候没玩过还真的想象不到呢。以前也一直对为何需要gcc同时处理多个.c文件理解不清,其实就算gcc同时处理100个文件以上,原因也只有一个,就是很单纯地为从一个.c文件调用另一个.c文件这个很单纯的目的而服务。

下面是转帖:

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

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

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

getop.h:

#ifndef _H_GETOP
#define _H_GETOP
int getch(void);
void ungetch(int c);
int getop(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" //只需这样引用即可

再调用getop.c中函数

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

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值