const与#define对全局常量的主要优点是什么?

vsz*_*vsz 3 c c++

例如,在嵌入式编程中,由于以下原因,#define GLOBAL_CONSTANT 42首选const int GLOBAL_CONSTANT = 42;:

  • 它不需要放在RAM中(在微控制器中通常非常有限,μC应用通常需要大量的全局常量)
  • const 不仅需要闪存中的存储位置,而且编译器会在程序开头生成额外的代码来复制它.

反对使用的所有这些优点,使用#define的主要优点是const什么?在非μC环境中,内存通常不是一个大问题,并且const因为它可以在本地使用而有用,但是全局常量呢?或者答案只是"我们永远不应该使用全局常量"?

编辑:

这些例子可能引起了一些误解,所以我必须声明它们在C中.如果C编译器为这两者生成了完全相同的代码,我认为这将是一个错误,而不是一个优化.

我只是将问题扩展到C++而不考虑它,希望获得新的见解,但我很清楚,在面向对象的环境中,全局常量的空间很小,无论它们是宏还是consts.

Tad*_*pec 8

你确定你的编译器太笨了,无法通过在需要的地方插入值而不是将其放入内存来优化常量吗?编译器通常都有很好的优化.

常量与宏的主要优点是常量具有范围.宏在任何地方都被替换,不考虑范围或上下文.它导致很难理解编译器错误消息.
调试器也不知道宏.
更多信息可以在这里找到