C代码:主要调用函数

时间:2016-12-07 06:39:18

标签: c unix gcc

我有两个用C代码编写的程序,它们都有主要功能(我无法在没有main函数的情况下运行程序)现在我想创建一个主文件说main.c从哪里可以称这两个功能。我怎样才能做到这一点 ?请建议..我对c编程比较新。

Rk4solution.c

#define beginrk4 main
 int func (double t, const double y[], double f[], void *params)
 {}
int beginrk4 () /*** main function ***/

Rk8pdsolution.c

#define beginrk8pd main
int func (double t, const double y[], double f[], void *params)
{}
int beginrk8pd () /*** main function ****/

如何创建一个主函数来调用这两个?

1 个答案:

答案 0 :(得分:0)

将评论转换为答案。

您似乎在每个源文件中都有一个名为Object obj; Builder()(obj, &Object::method, 0, 0, 0); 的全局函数,以及映射到func()的一对函数名beginrk4beginrk8pd。这是两个冲突 - 两个main()和两个func()

您需要为每个main()指定自己的名称,并禁止各个文件中的func()函数。您最终会得到两个源文件,一个用于main()(例如rk4),另一个用于rk4.crk8pd),还有两个标头(rk8pd.c和rk8pd .h rk4.h rk.h ) — or possibly one header main()— for declaring the functions. You then write a main.c`)调用其他函数,并包含用于声明函数的标题。

  

仍然收到错误function in a third source file (

     

我是否需要通过gcc提供特定的文件名?

main.c:(.text+0xa): undefined reference to `beginrk4'

是;如果您有三个源文件:gcc -I$TACC_GSL_INC -I$TACC_GRVY_INC -L$TACC_GRVY_LIB -L$TACC_GSL_LIB -lgsl -lgslcblas -lgrvy main.c main.crk4.c,那么您有多种选择,但

rk8pd.c
只要不重复gcc -o rk main.c rk4.c rk8pd.c -lm main()

就可能会为您生成一个可运行的程序。始终在源文件和/或目标文件之后列出库(func())。总是!