我有两个用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 ****/
如何创建一个主函数来调用这两个?
答案 0 :(得分:0)
将评论转换为答案。
您似乎在每个源文件中都有一个名为Object obj;
Builder()(obj, &Object::method, 0, 0, 0);
的全局函数,以及映射到func()
的一对函数名beginrk4
和beginrk8pd
。这是两个冲突 - 两个main()
和两个func()
。
您需要为每个main()
指定自己的名称,并禁止各个文件中的func()
函数。您最终会得到两个源文件,一个用于main()
(例如rk4
),另一个用于rk4.c
(rk8pd
),还有两个标头(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.c
和rk4.c
,那么您有多种选择,但
rk8pd.c
只要不重复gcc -o rk main.c rk4.c rk8pd.c -lm
和main()
,就可能会为您生成一个可运行的程序。始终在源文件和/或目标文件之后列出库(func()
)。总是!