C语言里,我想用一个.h文件去做多个.c的header
貌似一个header文件只能做一个.c文件的header我想请教一下能不能一个header文件里面包含了多个.c的函数呢?例如//mainfn.c#include<std...
貌似一个header文件只能做一个.c文件的header
我想请教一下能不能一个header文件里面包含了多个.c的函数呢?
例如
//mainfn.c
#include <stdio.h>
#include "foo.h"
int main ()
{
printf("2 + 3 is %d\n", add(2,3));
printf("2 X 3 is %d\n", mult(2,3));
}
------------------------------
//foo.h
#ifndef FOO_H
#define FOO_H
int add (int a, int b);
int mult (int a, int b);
#endif
-------------------------------
//add.c
#include "foo.h"
int add (int a, int b)
{
return a + b;
}
--------------------------------
//mult.c
#include "foo.h"
int mult (int a, int b)
{
return a * b;
}
报错如下:
Running tool: RunC
Running test.c failed because the implementation of the foo module is missing
Exited: 256
貌似foo.h只能做foo.c的header 展开
我想请教一下能不能一个header文件里面包含了多个.c的函数呢?
例如
//mainfn.c
#include <stdio.h>
#include "foo.h"
int main ()
{
printf("2 + 3 is %d\n", add(2,3));
printf("2 X 3 is %d\n", mult(2,3));
}
------------------------------
//foo.h
#ifndef FOO_H
#define FOO_H
int add (int a, int b);
int mult (int a, int b);
#endif
-------------------------------
//add.c
#include "foo.h"
int add (int a, int b)
{
return a + b;
}
--------------------------------
//mult.c
#include "foo.h"
int mult (int a, int b)
{
return a * b;
}
报错如下:
Running tool: RunC
Running test.c failed because the implementation of the foo module is missing
Exited: 256
貌似foo.h只能做foo.c的header 展开
7个回答
展开全部
这种做法没有问题,你的理解正好是反的。你有这种想法可能被是教科书误导了。
事实上这是一种很经典的做法,把公共的声明、宏定义放在公共的头文件中,然后让所有要使用这些声明、宏定义的c文件都包含这个公共的头文件。
最后提醒你注意,不要在头文件中放可以产生空间占用的语句,代码和变量定义都不行。如果以后组织头文件的过程中出问题,可以回过头来看看有没有这个问题。
列出的错误是因为链接程序找不到foo这个模块,把三个c文件组织成项目,并设置好包含路径,再试试。
事实上这是一种很经典的做法,把公共的声明、宏定义放在公共的头文件中,然后让所有要使用这些声明、宏定义的c文件都包含这个公共的头文件。
最后提醒你注意,不要在头文件中放可以产生空间占用的语句,代码和变量定义都不行。如果以后组织头文件的过程中出问题,可以回过头来看看有没有这个问题。
列出的错误是因为链接程序找不到foo这个模块,把三个c文件组织成项目,并设置好包含路径,再试试。
追问
我的C貌似没这个功能 : ( 只能编辑 编译运行... 很烂- -
...... 我发现只要foo.h里面的声明不在foo.c这个特定名字的文件里的时候, 就算之后其他c文件包含了这个foo.c, 他也不会被运行
是不是C++可以这么用C不行诶?
追答
不知道你用的是什么系统。通常C语言的编译与链接是两个独立的程序,C++也是这样。
但有的个别编译器在进行单个文件编译的时候,会自动调用链接程序,Borland C就是这样。
当各个函数分处于不同的源文件中,每个文件需要分别编译,编译程序执行的结果是生成OBJ文件。把所有这些OBJ文件用链接程序“合”起来,才能得到可执行文件。
展开全部
这样写是决对可以的。可能是你没有添加mult.c,add.c到工程。
还有FOO。H这样写。
//foo.h
#ifndef FOO_H
#define FOO_H
#endif
int add (int a, int b);
int mult (int a, int b);
还有FOO。H这样写。
//foo.h
#ifndef FOO_H
#define FOO_H
#endif
int add (int a, int b);
int mult (int a, int b);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以实现。在xxx.c文件中直接#include“XX.h”,就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将.h文件包含就可以了
追问
额... 包含了的, 在那个mainfn.c里面, 他说foo.h里面的implementation is missing
追答
我有将一个头文件在每个cpp里面都包含的,可以用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
h调用c文件的时候,会有重定义的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询