2016-12-07 58 views
-3

調用函數我有我已經寫在C代碼兩者都主要功能(我是不是能夠運行無主功能的程序),現在我想建立一個單一的主文件說,兩個方案main.c從哪裏可以調用這兩個函數。我怎樣才能做到這一點 ?請建議..我對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

2. SO未取代靠在編程 –

+0

@SouravGhosh:序列並不重要。我已經創建這些使用GSL LIB解決二階微分方程。 – ausworli

回答

0

轉換註釋到答案。

你似乎有一個名爲func()在每一個源文件的全局函數,也是對函數名beginrk4beginrk8pd您映射到main()的。這是兩個衝突 - 兩個func()和兩個main()

您需要爲每個func()指定自己的名稱,並在各個文件中禁止main()函數。你結束了兩個源文件,一個爲rk4(如rk4.c),一個用於rk8pdrk8pd.c),和兩個頭(rk4.h和rk8pd.h ) — or possibly one header rk.h — for declaring the functions. You then write a的main()function in a third source file ( main.c`)調用其他函數,幷包含聲明函數的頭文件。

仍然得到錯誤main.c:(.text+0xa): undefined reference to `beginrk4'

我需要通過GCC給出具體的文件名?

gcc -I$TACC_GSL_INC -I$TACC_GRVY_INC -L$TACC_GRVY_LIB -L$TACC_GSL_LIB -lgsl -lgslcblas -lgrvy main.c 

是的;如果你有三個源文件:main.crk4.crk8pd.c,那麼你有多種選擇,但

gcc -o rk main.c rk4.c rk8pd.c -lm 

大概只要main()func()不重複產生你執行的程序。始終在源文件和/或目標文件之後列出庫(-lxyz)。總是!