读书人

两个C文件其中一个调用另一个的定义

发布时间: 2012-09-10 22:20:12 作者: rapoo

两个C文件,其中一个调用另一个的定义函数
假设现在有两个c文件,support.c和paser.c。
在support.c中已经定义好一个qmf_32_subbands_init();现在我要在paser.c定义这个qmf_32_subbands_int()。
我是这样做的:
extern void qmf_32_subbands_init() ;
但是我在make编译到时候,提示未定义这个函数qmf_32_subbands_init,
请教下各位这种情况应该怎么样才能正确的调用到?小弟刚接触C,谢谢!


[解决办法]
1. support.c 中的 qmf_32_subbands_init() 是 static 的吗?
2. Makefile 中编译 parser.c 的语句指明对 support.o 的依赖了吗?
[解决办法]
建一个support.h文件此问价里包含所有support.c文件的函数声明,然后在paser.h里包含这个support.h头文件。paser.c包含paser.h头文件即可。
[解决办法]
直接包含头文件不行吗
[解决办法]

探讨
假设现在有两个c文件,support.c和paser.c。
在support.c中已经定义好一个qmf_32_subbands_init();现在我要在paser.c定义这个qmf_32_subbands_int()。
我是这样做的:
extern void qmf_32_subbands_init() ;
但是我在make编译到时候,提示未定义这个函数qmf_32_subbands_in……

[解决办法]
有两种正规途径引用别的模块实现的函数,
1. 头文件声明,源文件实现。如 a.h 中声明函数 void test(); a.c 中实现它,其他的模块想使用 test 函数时,直接 #include "a.h" 即可,注意, test 不能是 static 的
2. 像楼主说的用 extern,但引用的函数同样不能 static 并且链接时应指明引用方对被引用方的依赖。
[解决办法]
在一个文件中定义的 static 的函数只能在本文件中使用
探讨

引用:

有两种正规途径引用别的模块实现的函数,
1. 头文件声明,源文件实现。如 a.h 中声明函数 void test(); a.c 中实现它,其他的模块想使用 test 函数时,直接 #include "a.h" 即可,注意, test 不能是 static 的
2. 像楼主说的用 extern,但引用的函数同样不能 static 并且链接时应指……

[解决办法]
探讨

引用:

有两种正规途径引用别的模块实现的函数,
1. 头文件声明,源文件实现。如 a.h 中声明函数 void test(); a.c 中实现它,其他的模块想使用 test 函数时,直接 #include "a.h" 即可,注意, test 不能是 static 的
2. 像楼主说的用 extern,但引用的函数同样不能 static 并且链接时应指……

[解决办法]
如果是static修饰的函数,那么该函数的作用域是在该文件内即只有在所在的源文件内才有有效。这样你是不可以在另一个文件内声明的,即使声明了,那也不是这个文件内定义的函数,尽管是函数名是相同的。

读书人网 >C语言

热点推荐