#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)使用Microsoft特定的数据类型。否则,请使用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(同样,以字节为单位)。

关于c++ - 谁能解释这个代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6567854/

10-11 22:33
查看更多