我想生成一個隨機數字或字符串使用C預處理器......恩......我甚至不知道這是否可能,但我試圖即時創建變量(字符串在這裏很有幫助)併爲它們賦值(整數)。所以我正在嘗試做一些事情,但基本問題仍然存在 - 我可以使用預處理器創建一個隨機字符串或數字。使用C預處理器生成一個隨機數
9
A
回答
12
我想問你是否想通過預處理器創建唯一標識符標記。
gcc有一個名爲__COUNTER__
的擴展名,它的名字就是你期望的。您可以將其與宏連接##
組合以獲取唯一標識符。
如果你有一個C99編譯器,你可以使用P99。它有稱爲P99_LINEID
和P99_FILEID
的宏。它們可以用作
#include "p99_id.h"
P99_LINEID(some, other, tokens, to, make, it, unique, on, the, line)
並且類似地用於P99_FILEID
。
第一次從您的令牌中調出一個名稱,並且行號和散列值取決於包含文件「p99_id.h」的次數。第二個宏只是使用該散列而不是行號,這樣名稱就可以在同一編譯單元中的多個位置重現。
這兩個宏也有對應的P99_LINENO
和P99_FILENO
,它們只是產生大量的數字而不是標識符標記。
-5
不要在C中這樣做。最終會讓人困惑。如果您需要隨時創建變量,請使用malloc
和realloc
並保留其值的數組。
要回答你的問題,沒有。預處理器不包含隨機數生成器。您可以在運行時生成隨機數(使用rand()
),但如果您在編譯時確實需要它們,則必須編寫自己的預處理器並通過它運行代碼。或者你可以使用4,這是由一卷公平的100面骰子隨機決定的。
15
基於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;
}
輸出:
247524236
3009541994
1129205949
+0
嵌入式系統的很好的實現。兩個答案都很好。 – Xofo 2015-05-27 17:45:43
相關問題
- 1. C++爲psudo隨機數生成器生成一個很好的隨機種子
- 2. 使用capl生成一個隨機數
- 3. 隨機生成器Objective-C
- 4. 我如何使用隨機類在C#中生成一個隨機數(XNA)
- 5. 如何使用C++ 11標準庫生成一個隨機數
- 6. c中的隨機數生成器#
- 7. C++生成隨機數-1
- 8. C#生成隨機數
- 9. C#生成一個隨機IP地址
- 10. 用於生成函數名稱的C預處理器定義
- 11. 試圖在C#中創建一個隨機數生成器4.69
- 12. C++:如何從一個數組中生成一個隨機數
- 13. 生成一個隨機數得到一個隨機列表項
- 14. 生成一組隨機數
- 15. 使用boost :: random的平臺隨機生成一致隨機數
- 16. 隨機數發生器,C++
- 17. 生成多個隨機數
- 18. 如何在C預處理器中生成唯一值?
- 19. 使用drand48_r作爲C中的隨機數生成器
- 20. 使用C#在一個範圍內產生一個隨機數
- 21. 如何生成一個隨機數
- 22. 在Haskell中生成一個隨機數
- 23. 在super.ViewDidLoad下生成一個隨機數
- 24. 在JavaScript中生成一個隨機數
- 25. 生成一個N位隨機數
- 26. 在CakePHP中生成一個隨機數?
- 27. 爲HTML生成一個隨機數
- 28. C預處理器宏可以生成函數嗎?
- 29. C#在使用庫時生成隨機數,使用內部隨機實例
- 30. 在隨機生成器中使用NSMutableArray
簡而言之:無。你將不得不寫一個你自己的簡單預處理器。不要忘了設計一種方式來測試你的隨機源代碼。 – 2011-03-18 16:59:38
你見過這個嗎? http://www.ciphersbyritter.com/NEWS4/RANDC.HTM'1999-01-15 Jeff Stout' – 2011-03-18 17:01:58
你真的需要*隨機*還是你只需要*獨特*?如果後者可能使用'__LINE__'來創建唯一的變量名稱? – 2011-03-18 17:29:20