分页: 1 / 1

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

发表于 : 2007-08-02 12:40
lyre
假如我在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个源文件的程序,运行结果怎么都不对……怒了把所有文件合并到一个文件里面编译一次,居然就对了……搞不懂……

发表于 : 2007-08-02 12:53
swordzjj
新建一个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

发表于 : 2007-08-02 12:55
suncanoe
c编程基础不够啊,感觉还没有入门。linux试用的是C语言,文件之间该怎么调用,看看书不就行了吗.

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

代码: 全选

  man gcc

发表于 : 2007-08-02 13:13
lyre
我真的只是初学者呀XD

突然发现后面两节是作用域规则和头文件,原来作者根本没想要这个程序在这时候能跑起来……

发表于 : 2007-08-02 13:15
BigSnake.NET
lyre 写了:我真的只是初学者呀XD
初学者不学习就永远是初学者

发表于 : 2007-08-02 13:28
nihui
BigSnake.NET 写了:
lyre 写了:我真的只是初学者呀XD
初学者不学习就永远是初学者
但有的时候即使学习了,也还是初学者。。。 :P

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

另外,一段时间以后#define A 100这样的语句会被淘汰的,#define 最主要用在预编译上.

发表于 : 2007-08-02 14:07
lyre
拆分了一下头文件,终于好了,谢谢各位:)