C中的循环#defines

问题描述 投票:2回答:5

请注意 - 我没有写这段代码,我只是想保持/改进它。

我的一个头文件包含以下行:

/* macros to seed the random number generator */
/* This is needed on Windows which throws an error due to 'random' 
not being defined on MingW.  I'll clean it up later. */
#define srandom srand
#define random rand

/* New random seed function. */
#define srand srandom
#define rand random

#define rnd(x)  ((int)(rand() % (x)) + 1)
#define rund(x) ((int)(rand() % (x)))

此外,我有所有四个函数randsrandrandomsrandom的手册页,所以我认为这些都是有效的C函数。

你能帮我理解/弄清楚当我打电话给rnd(10)时会发生什么吗?这是未定义的行为吗?一个定义是否以某种方式“覆盖”了另一个?

(我问,因为我觉得我的实际程序中有很多低数字,即使我的测试程序似乎正常工作并随机分发。)


只是一个快速的说明,我几乎肯定我看到的“很多低数字”可能是运算符优先级和括号中的错误,导致长布尔总是评估为“true”。

c random c-preprocessor
5个回答
© www.soinside.com 2019 - 2024. All rights reserved.