1
A
回答
3
符号常数(与
#define
):在定义点不检查。在文本替换之后,在使用点进行正常检查。可用于任何基本类型的常量(在C99中,即使对于非基本类型)枚举:只能保存整数,并在定义点检查。
const
-qualified变量:在C中不是真正的常量,但应该被视为“只读”变量。因为它不是一个常数,所以这些不能用在语言要求不变的地方。
应假定变量(即使它们是“只读”)会占用内存。可以假设枚举器和#define
可以产生直接插入代码中的常量值。在实际情况下,实际情况还取决于常量类型和CPU处理这些常量的能力。
就类型安全而言,没有太大的差别。除非编译器会尝试使用非整数初始化枚举器,否则会更大声地抱怨。
实际上,枚举最常用于紧密相关的整数常量组,而#define
则用于其他所有内容。
0
我会亲自选择枚举 - >给你声明常量的能力,并且仍然可以使用如下构造:XmlStatusesEnum :: XML_FILE_OK。
1
符号常量得到一些类型检查,通常是一个编译器会告诉你,如果一个常数过大,以适应在你为它分配
枚举常量得到任何类型的所有检查,因为他们只是int
的地方。与枚举类型变量可能会得到某种类型和范围检查相反。
有没有像恒定变量这样的事情,你可能意味着const
合格变量。这些是类型安全的,是的,但并不是常量在C如何理解单词常量。把它们看作unmutable
或invariant
。
C中的常量不占用任何空间,它们只是编译过程中需要的符号值,在执行过程中没有对应的对象。
相关问题
- 1. 作为常量或字符串比较枚举
- 2. 枚举常量
- 3. 枚举和常量
- 4. 字符串值的符号常量的.NET枚举
- 5. Java枚举与字符串常量
- 6. 将枚举常量与没有valueOf或toString的字符串进行比较?
- 7. MSVC常量枚举类型
- 8. 常量枚举(tsc.js VS typescript.js)
- 9. Grails:java.lang.IllegalArgumentException:没有枚举常量
- 10. 没有枚举常量org.primefaces.extensions.component.exporter.DefaultExporterFactory.ExporterType.CSV
- 11. 全局常量与枚举
- 12. 比较std :: string与常量vs比较字符数组与常量在C++
- 13. 比较枚举值
- 14. 为什么使用字符串常量与枚举常量?
- 15. 警告C4341 - 'XX':符号值超出范围的枚举常量
- 16. 带数字常量的枚举类型
- 17. 存储枚举常量数据库
- 18. 枚举中的数字常量(c#)
- 19. 通过常量特定数据在枚举常量内查找
- 20. 比较常量字符与字符串
- 21. 更改自变量时,枚举可能不会执行异常
- 22. 如何比较字符串数组变量与正常字符串变量
- 23. 枚举常数如VB6
- 24. FluentAssertion无法比较枚举字符串
- 25. 比较字符串和枚举
- 26. 我可以比较MySQL枚举吗?
- 27. MySQL的比较枚举
- 28. 如何比较枚举值?
- 29. C#枚举标志比较
- 30. 红宝石“枚举”比较
为了补充说明,枚举还可以允许一些调试器显示枚举常量的名称而不是数值。此外,如果可以确定永远不会计算其地址(这将是一个优化选项,而不是默认行为),则某些编译器可以将'const'限定的变量视为符号常量。 – bta 2010-09-13 18:07:35