标题中声明的难以捉摸的c函数

时间:2015-05-14 08:07:58

标签: c

这是C文件: http://simul.iro.umontreal.ca/rng/WELL19937a.c(我没有注释,正如L'Ecuyer所说的那样)

这是C标头: http://simul.iro.umontreal.ca/rng/WELL19937a.h

问题是:C文件中的 double(* WELLRNG19937a)(void)在哪里?

我没有看到它。但它存在。此代码适用于TIGCC,但产生0。

#include "WELL44497a.h"
#include <tigcclib.h>
void _main(void)
 {
 unsigned int u=33337;
InitWELLRNG44497a(&u); //this function probably wants array of good seeds but I don't have them.

double a = WELLRNG44497a()  ;
clrscr();
printf("%f",a);
ngetchx();//wait for keyboard input
}

删除InitWELLRNG44497a(&amp; u)会使它抛出SIGSEGV(这可以保证其他功能存在)

如果你告诉我这个功能在哪里,我会非常感激的。更重要的是,如果你告诉我如何使用这个功能。

PS。没有什么可以澄清了。这是一个非常愚蠢的问题,但已经得到了回答。函数给出零的原因是不同的。

1 个答案:

答案 0 :(得分:0)

double (*WELLRNG19937a) (void)是指向double funcname (void)函数的指针。

在第一个函数中

void InitWELLRNG19937a (unsigned int *init) 

你可以看到

WELLRNG19937a = case_1;

其中case_1是

double case_1 (void)

然后在main中调用由WELLRNG19937a指针激活的函数。真正的被调用函数将是case_1

删除InitWELLRNG44497a(&amp; u)使其抛出SIGSEGV

由于is InitWELLRNG44497a初始化函数指针,导致段错误,否则指针未初始化。