2

简单的问题:

你如何改变 #define TIMER_MAX 0xFFFF ; 成一个常量变量?我不确定要使用什么类型。是一个字节吗?

谢谢

4

6 回答 6

6

它需要2个字节,uint16_t适用于:

#include <cstdint>

const uint16_t TimerMax = 0xFFFF;
于 2013-10-25T19:36:57.963 回答
3

它不是一个字节。一个字节有 8 位,因此支持 0-255 的无符号值。

值 0xFFFF 至少需要一个 16 位的值。我会把它变成一个枚举常量,让编译器选择合适的大小:

enum { TimerMax = 0xFFFF };

这样做的好处是它将在 C 和 C++ 中都被视为编译时常量。无论好坏,它还保留了您无法获取的内存位置的宏属性TimerMax

可以说它比使用 const 变量可读性差,但它在 C 语言中很常见,我认为这不是问题。

于 2013-10-25T19:41:51.997 回答
3
const unsigned TimerMax = 0xFFFF;

应该做得很好。除非您需要TimerMax特定尺寸

于 2013-10-25T19:36:47.820 回答
0

您不能将#define宏更改为变量,无论是否const。宏和变量声明属于编译过程的两个完全不同的阶段。宏由预处理器扩展,而变量在代码的语义分析过程中分配。所以,只有当你真的知道你正在使用的代码时才这样做。

于 2013-10-25T19:38:25.437 回答
0

这将是 2 个字节,所以很短。

您可以将其定义如下:

const unsigned short TimerMax = 0xFFFF;
于 2013-10-25T19:39:17.020 回答
0

您可以只使用 char(1 字节) 或 short(2 字节) 两种大小都取决于机器实现,如果需要,可以用十六进制声明它。

unsigned short hex_num = 0xFFFF; // 0xFFFF is 2 bytes
于 2013-10-25T19:39:45.817 回答