[提问]一些多个源文件编译的问题……

C、C++和Java语言
回复
头像
lyre
帖子: 77
注册时间: 2005-06-28 18:08
送出感谢: 0
接收感谢: 0

[提问]一些多个源文件编译的问题……

#1

帖子 lyre » 2007-08-02 12:40

假如我在main.c里面头部写了
#include<stdio.h>
#define A 100

main()
{……}

然后把一个子函数放在sub.c,其中调用了标准库的printf()和前面main.c定义的A,那么这个sub.c的头部还要不要加入这两句?
#include<stdio.h>
#define A 100

我是直接gcc *.c编译的,不写这两句通不过编译,提示说未定义,但是我觉得这样会不会重复定义了,影响最后的程序?

btw,一般处理多个源文件时,gcc该怎么用?
gcc *.c?
gcc -c *.c然后gcc *.o?

我的教材对于多个源文件编译的细节讲的太不详细,我也找不到更多有关的东西,只好上来问了= =

昨天编译一个4个源文件的程序,运行结果怎么都不对……怒了把所有文件合并到一个文件里面编译一次,居然就对了……搞不懂……
swordzjj
帖子: 18
注册时间: 2006-11-23 18:04
送出感谢: 0
接收感谢: 0

#2

帖子 swordzjj » 2007-08-02 12:53

新建一个def.h文件这样写
#ifndef _def_h
#define _def_h

#define A 10

#endif
然后让所有的.c都包含def.h文件。
编译用这个: gcc -o test main.c a.c b.c sub.c
头像
suncanoe
帖子: 476
注册时间: 2005-12-07 0:17
来自: 昆明
送出感谢: 0
接收感谢: 0

#3

帖子 suncanoe » 2007-08-02 12:55

c编程基础不够啊,感觉还没有入门。linux试用的是C语言,文件之间该怎么调用,看看书不就行了吗.

至于gcc,告诉你一个好方法:

代码: 全选

  man gcc
头像
lyre
帖子: 77
注册时间: 2005-06-28 18:08
送出感谢: 0
接收感谢: 0

#4

帖子 lyre » 2007-08-02 13:13

我真的只是初学者呀XD

突然发现后面两节是作用域规则和头文件,原来作者根本没想要这个程序在这时候能跑起来……
上次由 lyre 在 2007-08-02 13:20,总共编辑 1 次。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#5

帖子 BigSnake.NET » 2007-08-02 13:15

lyre 写了:我真的只是初学者呀XD
初学者不学习就永远是初学者
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
nihui
帖子: 1746
注册时间: 2006-10-21 12:03
来自: Shanghai
送出感谢: 0
接收感谢: 0
联系:

#6

帖子 nihui » 2007-08-02 13:28

BigSnake.NET 写了:
lyre 写了:我真的只是初学者呀XD
初学者不学习就永远是初学者
但有的时候即使学习了,也还是初学者。。。 :P
.

私人空间
附有 Magic Linux 2.1 最新开发日志~


미안하다, 사랑한다


欢迎来 #xfce-cn 中文频道~~
头像
cherry4
帖子: 15
注册时间: 2007-08-01 13:30
送出感谢: 0
接收感谢: 0

#7

帖子 cherry4 » 2007-08-02 13:48

1.至于 #define只是一条预处理指令,实现简单的字符替换,在main.c的汇编代码里没有任何它的符号信息,所以在编译sub.c时报未定义编译错误。
2.至于:btw,一般处理多个源文件时,gcc该怎么用?
编译的时候可以加上 gcc --verbose *.c 看看过程.

另外,一段时间以后#define A 100这样的语句会被淘汰的,#define 最主要用在预编译上.
头像
lyre
帖子: 77
注册时间: 2005-06-28 18:08
送出感谢: 0
接收感谢: 0

#8

帖子 lyre » 2007-08-02 14:07

拆分了一下头文件,终于好了,谢谢各位:)
回复

回到 “C/C++/Java”