2013-10-25 93 views
2

简单问题:C/C++改变定义一个变量

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

感谢

+0

这是两个字节,所以也许 - 'uint16_t TIMER_MAX = 0xFFFF的;' – 0x499602D2

+0

或者只是诠释。取决于它所用的上下文我会说。 –

+1

如果它在'int'之前工作得很好,不妨将它保存为'int'。 – bstamour

回答

3
const unsigned TimerMax = 0xFFFF; 

应该做的很好。除非你需要TimerMax是一个具体大小。

+2

如果你的int是只有16位(这是由标准允许的),然后呢?你必须至少使它成为一个unsigned int。 – sfstewman

+0

@sfstewman:很对,编辑,谢谢。 –

6

它需要字节,uint16_t适合:

#include <cstdint> 

const uint16_t TimerMax = 0xFFFF; 
+0

我唯一不同的做法是将其标记为'constexpr',以便在需要时可用于编译时编程。 – bstamour

+3

@bstamour:从常量表达式初始化的标记为'const'的标量变量是常量表达式。 –

+0

@ BenjaminLindley在C++中这是真实的,但我不相信它是用于C的,并且这个问题被标记为两个。当然,C没有'constexpr'修饰符。 – sfstewman

0

你不能改变一个#define宏观到一个变量,无论是const与否。宏和变量声明属于编译过程的两个完全不同的阶段。宏由预处理器扩展,而变量在语义分析代码时分配。所以,只有在你真正了解你所在的代码的情况下才能这样做。

+0

#defines常常被用作全局常量值,这些值不会被任何其他预处理器表达式引用。因此,您可以将它们替换为常量变量,并且在这些情况下,实际上建议这样做。 –

+1

OP在编写代码(我认为)时想改变它。所以他可以删除宏并放入其他东西。 – deepmax

0

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

如下您可以定义它:

const unsigned short TimerMax = 0xFFFF; 
0

你可以只使用一个char(1个字节)或短(2个字节)两种尺寸取决于机实现虽然,如果你宣布它在十六进制想。

unsigned short hex_num = 0xFFFF; // 0xFFFF is 2 bytes 
3

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

值0xFFFF至少需要一个16位的值。我会做这个成枚举常量,让编译器选择合适的尺寸:

enum { TimerMax = 0xFFFF }; 

这具有将被视为一个编译时在C和C++常量的优点。此外,无论更好还是更坏,保持宏的属性,你不能把内存位置TimerMax

这比使用一个const变量可以说的可读性,但它在C这样一个常见的成语,我不觉得这是一个问题。