QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 896|回复: 8

初级问题 关于gcc和g++的函数调用问题

[复制链接]
发表于 2004-6-3 16:38:14 | 显示全部楼层 |阅读模式
现在有max.c num.c num.h三个文件,其中max.c中要调用函数num.c中的函数float max(float a,float b);并且头文件中已经包含num.h

现在的问题是num.h中需要不需要#include "num.c"  我试验结论是用c编译器gcc就不用加,而用c++编译器g++就必需加,要不就说没有定义函数...

请哪位大虾指导下详细怎么编译的,为什么一个用,一个不用呢?

谢谢!!
发表于 2004-6-3 16:50:17 | 显示全部楼层
num.h中#include "num.c" 这是什么逻辑
回复

使用道具 举报

发表于 2004-6-3 16:50:42 | 显示全部楼层

Re: 初级问题 关于gcc和g++的函数调用问题

[quote:bcf61411d4="holl"]现在有max.c num.c num.h三个文件,其中max.c中要调用函数num.c中的函数float max(float a,float b);并且头文件中已经包含num.h

现在的问题是num.h中需要不需要#include "num.c"  我试验结论是用c编译器gcc就不用加,而用c++编译器g++就必需加,要不就说没有定义函数...

请哪位大虾指导下详细怎么编译的,为什么一个用,一个不用呢?

谢谢!![/quote]用G++就编译.C或.cpp文件了.你写的C程序干嘛用G++去编译?
用GCC不就是?
回复

使用道具 举报

 楼主| 发表于 2004-6-3 16:53:45 | 显示全部楼层
我想写C++程序呀..
回复

使用道具 举报

发表于 2004-6-3 16:54:00 | 显示全部楼层
不管用什么编译器,都不用这样。
回复

使用道具 举报

发表于 2004-6-3 16:56:07 | 显示全部楼层
说说你的编译命令
回复

使用道具 举报

 楼主| 发表于 2004-6-3 17:20:19 | 显示全部楼层
好了...呵呵,刚才这样了:
makefile:

max:max.o num.o num.h
     g++ max.o num.o -o max
max.o:max.c num.h
     g++ -c max.c
num.o:num.c
     gcc -c num.c
clean:
     rm *.o

$make
g++ -c max.c
gcc -c num.c
g++ max.o num.o -o max
max.o(.text+0x66): In function `main':
: undefined reference to `max(float, float)'
collect2: ld returned 1 exit status
make: *** [max] Error 1

瞎做试验弄的,哈哈... 最后结论是加上#include "num.c"直接把函数包含到主文件中了,所以num.h没有用了..所以gcc -c num.c等于没有用,就通过了...没有包含就通不过..
看来gcc 和g++不能混用了,我都是调用极其简单的c和c++通用的函数的....
回复

使用道具 举报

发表于 2004-6-4 09:07:45 | 显示全部楼层
当然能混用啦。比如:
a.cxx
[code:1]
#include "b.h"
main()
{
       test();
}
[/code:1]

b.c
[code:1]
#include <stdio.h>
void test()
{
      printf("hello world!\n");
}
[/code:1]

b.h
[code:1]
extern "C"
{
     void test();
}
[/code:1]

g++ -c a.cxx
gcc -c b.c
g++ a.o b.o -o hello
回复

使用道具 举报

发表于 2004-6-7 00:25:37 | 显示全部楼层
头文件主要用来包含一些函数或变量的


比如你的例子中#include "num.c"纯粹画蛇添足,你只要将num.c中的函数
float max(float ,float )包含进来就可以了.(当然,如果有别的适当的变量或函数
也可以加进来,试程序而定)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 04:45 , Processed in 0.067500 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表