我有一个52KB的c程序,其中有几个函数(例如,Function1、Function2、Function3等),我从"Main"入口点函数调用这些函数。但是每次我需要使用这些函数时重写/重新编译程序似乎是在浪费我的新手时间。理想情况下,我想在Mathematica中调用这些函数,但我花了一整天的时间试图弄清楚WSTP/MathLink,似乎我无法实现这一点;考虑到令人厌烦的addtwo例子的普遍性,如果不是超出大多数的话。
必须有一种简单的方法来重写这个Main函数,这样,如果Mathematica没有调用(例如,LibraryFunctionLoad、Install、MLGetInteger()等),Function1、Function2等就可以通过命令行接口轻松执行
int main (int argc, char *argv[])
{
FUNCTION1(n1,n2,n3,etc.);
FUNCTION2(n4,n5,n6,etc.);
FUNCTION3(n7,n8,n9,etc.);
}
我知道如何更改源中的输入(即n1、n2、n3等),重新编译它,并获得输出。但是,我如何更改和/或包装上面的代码,以便可以通过命令行接口输入输入,或者更好地通过Mathematica输入?关于MathLink,似乎必须单独编译每个函数,也就是说,与通过主入口点函数访问所有函数相反,这是正确的吗?我在WWW上找到的关于c和命令行界面的一切都是幼稚的东西,比如让终端告诉你你在键盘上点击了多少次"回车"之类的东西。。。我知道我在这里问的是荒谬的基本问题,但如果我不是迫切需要答案的话,我不会冒失分的风险。
解析作为命令行参数的argc
/argv
,然后您应该能够根据需要进行转换。例如,如果您想转换命令行的第一个参数:
$ mycommand 10
对于int
,您可以使用:
int main(int argc,char **argv) {
int n1;
sscanf(argv[1],"%d",&n1); // convert string to int
FUNCTION1(n1,etc.);
}