Xof*_*ofo 10 random c-preprocessor
我想使用C预处理器生成一个随机数或字符串...嗯...我甚至不知道这是否可行,但我正在尝试动态创建变量(字符串在这里会很有用)和为它们分配值(整数).所以我尝试做了一些事情,但基本问题仍然存在 - 我可以使用预处理器创建一个随机字符串或数字.
ner*_*eia 17
基于 1999-01-15 Jeff Stout (感谢@ rlb.usa)
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
247524236
3009541994
1129205949
Run Code Online (Sandbox Code Playgroud)
Jen*_*edt 13
我想你想要通过预处理器创建唯一标识符令牌的方法.
gcc有一个被调用的扩展名,__COUNTER__
并按照你的名字做你所期望的.您可以将其与宏连接组合##
以获取唯一标识符.
如果你有C99编译器,你可以使用P99.它有宏P99_LINEID
和称为P99_FILEID
.它们可以用作
#include "p99_id.h"
P99_LINEID(some, other, tokens, to, make, it, unique, on, the, line)
Run Code Online (Sandbox Code Playgroud)
和类似的P99_FILEID
.
第一个修改了令牌中的名称和行号以及取决于文件"p99_id.h"被包含的次数的散列.第二个宏只使用该哈希而不是行号,以便名称可以在同一编译单元内的多个位置重现.
这两个宏也有同行P99_LINENO
和P99_FILENO
刚刚产生大量而不是标识符标记.
归档时间: |
|
查看次数: |
7873 次 |
最近记录: |