C 函数指针在getopt中不起作用
我有一些测试各种PRNG健壮性的代码,我想使用选项选择要测试的PRNG 我有一个函数指针类型:C 函数指针在getopt中不起作用,c,function-pointers,getopt,C,Function Pointers,Getopt,我有一些测试各种PRNG健壮性的代码,我想使用选项选择要测试的PRNG 我有一个函数指针类型:typedef double(*voidPRNG_ptr)(void) 我有一个测试功能:test\u results*investor\u alloc(int N,voidPRNG\u ptr RNGp) 其中,test\u results是一个类型定义的结构 我有PRNG功能:double-box\u-muller(void),双重拒绝(void),双重RNG(void),等等 以下代码在主体工程中
typedef double(*voidPRNG_ptr)(void)代码>
我有一个测试功能:test\u results*investor\u alloc(int N,voidPRNG\u ptr RNGp)
其中,test\u results
是一个类型定义的结构
我有PRNG功能:double-box\u-muller(void)
,双重拒绝(void)
,双重RNG(void)
,等等
以下代码在主体工程中适用:
int main(int argc, char** argv){
int N = atoi(argv[1]);
voidPRNG_ptr PRNGp = &box_muller;
test_results* results = investigator_alloc(N, PRNGp);
return 0;
}
box_muller函数用作RNG,数据与预期一致
这也很好:
int main(int argc, char** argv){
int N = atoi(argv[1]);
voidPRNG_ptr PRNGp = &box_muller;
PRNGp = &rejection;
test_results* results = investigator_alloc(N, PRNGp);
return 0;
}
如预期,拒绝方法用作RNG
但是,这不起作用:
int main(int argc, char **argv){
int opt;
int atest = 0;
voidPRNG_ptr PRNGp = &RNG; //set default
while((opt = getopt(argc, argv, "abur")) != -1){
if(opt == 'a') {
PRNGp = &normal_approx;
atest = 1;
}
else if(opt == 'b') PRNGp = &box_muller;
else if(opt == 'u') PRNGp = &RNG;
else if(opt == 'r') PRNGp = &rejection;
}
printf("\n %d\n",atest);
int N = atoi(argv[1]);
//PRNGp = &rejection;
//PRNGp = &normal_approx;
//PRNGp = &box_muller;
test_results *results = investigator_alloc(N,PRNGp);
return 0;
}
我知道getopt
正在工作,因为atest
根据所选选项设置为正确的值。但是函数指针肯定有问题,因为数据是空的
有什么想法吗?
谢谢 问题是您正在将atoi()
应用于第一个命令行参数,该参数是告诉程序要使用哪个RNG的选项。由于argv[1]
不是数字,因此最终得到的结果是N=0
并且没有数据
将argv[1]
更改为argv[optind]
(请参阅)。哇,我觉得自己很笨,我本该拿起它的。感谢完全无关的,但是如果你用-a-b
调用这个程序,你首先得到a
,设置为atest=1
,然后得到b
,给你留下box\u muller
作为PRNGp
,但是atest
仍然设置为1
。这就是你需要的吗?而且,即使你的问题得到了回答:老实说,你的描述“不起作用”有点糟糕。atest
只是在那里检查旗帜是否被设置。它并不是任何工作代码的一部分。公平地说,我应该详细说明它是如何工作的。