所以我试图创建一个伪随机数生成器,它将返回一个指定范围内的RN,供以后在我的程序中使用。
不幸的是,我的编译器(gcc)无法识别类型“time_t”、函数“time()”等。我以为我包含了正确的头,但编译时仍有错误。我可能只是累了,但搜索错误并没有得到有用的信息-所以我转向了伟大的stackoverflow。我很抱歉,如果问题很简单,我只是忽略了。。。
我的包括声明:
#include "param.h"
#include "mmu.h"
#include "x86.h"
#include "proc.h"
#include "spinlock.h"
#include "pstat.h"
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
RNG:
static int random_range (unsigned int min, unsigned int max){
// Get value from system clock and place in seconds variable
time_t seconds;
// Convert seconds to a unsigned integer.
time(&seconds);
// Set seed
srand((unsigned int) seconds);
int base_r = rand();
if (RAND_MAX == base_r) return random_range(min, max);
// now guaranteed to be in [0, RAND_MAX)
int range = max - min,
int remainder = RAND_MAX % range,
int bucket = RAND_MAX / range;
// There are range buckets, plus one smaller interval within remainder of RAND_MAX
if (base_random < RAND_MAX - remainder) {
return min + base_random/bucket;
}
else return random_in_range (min, max);
}
与上述相关的编译器错误-并非全部,因为我确定我缺少一些include语句或类似语句:
kernel/proc.c:9:18: error: time.h: No such file or directory
kernel/proc.c:10:20: error: stdlib.h: No such file or directory
kernel/proc.c:11:19: error: stdio.h: No such file or directory
kernel/proc.c: In function ‘random_range’:
kernel/proc.c:31: error: ‘time_t’ undeclared (first use in this function)
kernel/proc.c:31: error: (Each undeclared identifier is reported only once
kernel/proc.c:31: error: for each function it appears in.)
kernel/proc.c:31: error: expected ‘;’ before ‘seconds’
最佳答案
是的,你累了。注意,您的编译器似乎甚至找不到<stdio.h>
:
kernel/proc.c:10:20: error: stdlib.h: No such file or directory
您需要尝试编译一个简单的“hello world”程序-现在编译器显然在错误的地方查找include文件。您通常可以放置一个
-I some/path
来告诉编译器在哪里查找include文件…您可以显示您的compile命令吗?您拥有的makefile是否可能包含
-nostdinc
标志?这通常在编译内核代码时完成…请参见http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html关于c - C中的伪随机数生成器-带时间函数的种子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21964508/