#ifndef EIGHT_BIT
#define THIRTYTWO_BIT // default 32 bit
#endif
#ifdef THIRTYTWO_BIT
#define WORD unsigned long
#define WORDLENGTH 4
#if defined(WIN32) && !defined(__GNUC__)
#define WORD64 unsigned __int64
#else
#define WORD64 unsigned long long
#endif
// THIRTYTWO_BIT
#endif
#ifdef EIGHT_BIT
#define WORD unsigned short
#define WORDLENGTH 4
// EIGHT_BIT
#endif
回答
關於此代碼的首要注意事項是,它們都不會真正編譯到C中。每行不是空格或註釋都以井號(#
)開頭,這意味着它們是預處理器指令。預處理器指令在將代碼寫入編譯器之前會更改代碼。有關預處理器指令的更多信息,請參見this article。
現在我們知道了這麼多,讓我們來看看通過代碼:
#ifndef EIGHT_BIT
#define THIRTYTWO_BIT // default 32 bit
#endif
如果沒有定義宏EIGHT_BIT
,定義另一個宏稱爲THIRTYTWO_BIT
。這很可能是指處理器上一個字中的位數。此代碼旨在實現跨平臺,這意味着它可以在多個處理器上運行。您發佈的代碼段涉及管理不同的字寬。
#ifdef THIRTYTWO_BIT
#define WORD unsigned long
#define WORDLENGTH 4
如果宏THIRTYTWO_BIT
被定義,則定義一個WORD
是一個unsigned long
,其具有的WORDLENGTH
4(大概字節)。請注意,這個陳述不一定是正確的,因爲C標準只保證long
將至少與int
一樣長。
#if defined(WIN32) && !defined(__GNUC__)
#define WORD64 unsigned __int64
#else
#define WORD64 unsigned long long
#endif
如果這是32位Windows平臺和GNU C編譯器不可用,則使用64位字的微軟特定的數據類型(unsigned __int64
)。否則,請使用GNU C數據類型(unsigned long long
)。
// THIRTYTWO_BIT
#endif
每#if
和#ifdef
指令必須通過相應的#endif
匹配來描繪,其中條件段結束。該行結束前面提到的#ifdef THIRTYTWO_BIT
聲明。
#ifdef EIGHT_BIT
#define WORD unsigned short
#define WORDLENGTH 4
// EIGHT_BIT
#endif
如果目標處理器具有8位的一個字的寬度,然後定義一個WORD
是一個unsigned short
,並定義WORDLENGTH
爲4(再次,大概以字節爲單位)。
「,並且GNU C編譯器不可用」......這更多的是GNU C編譯器不是編譯代碼的問題...... ;-)。無論如何,+1對於一個好的,耐心的解釋。 –
這只是一個定義常量(又名定義),取決於#define EIGHT_BIT。
如果定義了EIGHT_BIT,則WORD表示無符號短符號,WORDLENGTH爲4.否則,WORD是無符號長符,WORDLENGTH也是4.此外,WORD64將被定義爲無符號long long,除非您在WIN32系統上並且不使用GCC。
所有「代碼」是否爲所有「實時」代碼設置了預處理器符號。如果在對此代碼進行預處理之前定義了一個名爲EIGHT_BIT
的符號,則它會相應地設置WORD
和WORDLENGTH
(儘管WORDLENGTH
的值可疑),並且如果尚未定義EIGHT_BIT
,它將設置不同的值。
+1,指出對於一個'unsigned short'的WORD,WORDLENGTH 4是非常可疑的。 –
- 1. 任何人都可以解釋我這個代碼行嗎?
- 2. 任何人都可以解釋我這個代碼的工作
- 3. 任何人都可以解釋這個matlab代碼給我嗎?
- 4. 任何人都可以幫我解釋這個python代碼嗎?
- 5. 任何人都可以向我解釋這段代碼?
- 6. 任何人都可以解釋我的這段代碼嗎?
- 7. Javascript:任何人都可以解釋我這段代碼嗎?
- 8. 任何人都可以請解釋我這段代碼?
- 9. 任何人都可以解釋這個peudo代碼(分區)
- 10. 任何人都可以解釋這個TypeScript代碼片段?
- 11. 任何人都可以解釋這個PHP代碼?
- 12. 任何人都可以解釋這
- 13. 任何人都可以幫助解釋這部分代碼?
- 14. 任何人都可以解釋這一小塊代碼?
- 15. 任何人都可以解釋這段代碼的輸出嗎?
- 16. 任何人都可以解釋我這個Java代碼是如何工作的?
- 17. 任何人都可以幫我解決這個代碼嗎?
- 18. 任何人都可以幫我理解這個代碼 - iOS swift
- 19. 任何人都可以讓我理解這個MATLAB代碼嗎?
- 20. 任何人都可以解釋這個PHP代碼注入攻擊給我?
- 21. 任何人都可以解釋我StandardScaler?
- 22. 任何人都可以解釋我的代碼
- 23. 任何人都可以解釋我下面的代碼。
- 24. 任何人都可以解釋我這個錯誤?
- 25. 任何人都可以向我解釋這個sed命令嗎?
- 26. 任何人都可以解釋我這個正則表達式
- 27. 任何人都可以向我解釋這個LabView模擬?
- 28. 任何人都可以解釋這個jQuery插件給我嗎?
- 29. 任何人都可以用英語向我解釋這個嗎?
- 30. 任何人都可以解釋這個C++循環爲我嗎?
這段代碼什麼都不做!它實際上是 – Donotalo
。在某處使用'WORD'的源代碼中包含此代碼。 –
@tobias langner,我的意思是代碼沒有任何可執行語句。 :) – Donotalo