Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 使用C预处理器生成一个随机数_Random_C Preprocessor - Fatal编程技术网

Random 使用C预处理器生成一个随机数

Random 使用C预处理器生成一个随机数,random,c-preprocessor,Random,C Preprocessor,我想使用C预处理器生成一个随机数或字符串。。。嗯。。。我甚至不知道这是否可行,但我正在尝试动态创建变量(这里字符串会很有用)并为它们赋值(整数)。因此,我正在尝试做一些事情,但基本问题仍然存在——我是否可以使用预处理器创建随机字符串或数字。我接受您的问题,您希望有一种通过预处理器创建唯一标识符标记的方法 gcc有一个扩展名为\uuuuu COUNTER\uuuuuu,它可以实现您对其名称的期望。您可以将其与宏串联##相结合,以获得唯一标识符 如果您有C99编译器,则可以使用。它具有名为P99\u

我想使用C预处理器生成一个随机数或字符串。。。嗯。。。我甚至不知道这是否可行,但我正在尝试动态创建变量(这里字符串会很有用)并为它们赋值(整数)。因此,我正在尝试做一些事情,但基本问题仍然存在——我是否可以使用预处理器创建随机字符串或数字。

我接受您的问题,您希望有一种通过预处理器创建唯一标识符标记的方法

gcc有一个扩展名为
\uuuuu COUNTER\uuuuuu
,它可以实现您对其名称的期望。您可以将其与宏串联
##
相结合,以获得唯一标识符

如果您有C99编译器,则可以使用。它具有名为
P99\u LINEID
P99\u FILEID
的宏。它们可以用作

#include "p99_id.h"

P99_LINEID(some, other, tokens, to, make, it, unique, on, the, line)
对于
P99\u FILEID
,情况也类似

第一个是从您的令牌中删除一个名称、行号和一个散列,该散列取决于文件“p99_id.h”被包含的次数。第二个宏只使用该散列而不是行号,这样一个名称就可以在同一个编译单元内的多个位置重复

这两个宏也有对应的
P99\u LINENO
P99\u FILENO
,它们只产生大量数字而不是标识符令牌。

基于(感谢@rlb.usa)


简而言之:不需要。你必须自己编写一个简单的预处理器。别忘了设计一种方法来测试你的随机源代码。你看过这个吗<代码>1999-01-15杰夫·斯托特(Jeff Stout)你真的需要随机的还是只需要唯一的?如果后者可能使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这两个答案都很好。它是什么意思:“种子每分钟都在变化”?是什么事件改变了它?@user10133158
\uuuuuu TIMESTAMP\uuuuuu
是一个具有1分钟精度的编译器变量。所以,每编译一分钟,种子都会发生变化,扩展名不是吗?想补充的是,
\uuuuuu计数器\uuuuu
也可用于其他编译器,如。请注意,
\uuu COUTER\uuu
仅对预处理器当前正在解析的文件是唯一的(对于解析的每个源文件,它都以
0
开头)。
#define UL unsigned long
#define znew  ((z=36969*(z&65535)+(z>>16))<<16)
#define wnew  ((w=18000*(w&65535)+(w>>16))&65535)
#define MWC   (znew+wnew)
#define SHR3  (jsr=(jsr=(jsr=jsr^(jsr<<17))^(jsr>>13))^(jsr<<5))
#define CONG  (jcong=69069*jcong+1234567)
#define KISS  ((MWC^CONG)+SHR3)
/*  Global static variables: 
    (the seed changes on every minute) */
static UL z=362436069*(int)__TIMESTAMP__, w=521288629*(int)__TIMESTAMP__, \
   jsr=123456789*(int)__TIMESTAMP__, jcong=380116160*(int)__TIMESTAMP__;


int main(int argc, _TCHAR* argv[]){
    cout<<KISS<<endl;
    cout<<KISS<<endl;
    cout<<KISS<<endl;
}
247524236
3009541994
1129205949