C宏:显然无用宏的优点/意图

Pan*_*tes 21 c macros

我在C编程方面有一些经验,但我不敢称自己精通.最近,我遇到了以下宏:

#define CONST(x) (x)
Run Code Online (Sandbox Code Playgroud)

我发现它通常用于表达式,例如:

double x, y;
x = CONST(2.0)*y;
Run Code Online (Sandbox Code Playgroud)

完全被这个宏的观点困惑,我广泛研究了宏的优点/缺点和属性,但我仍然无法弄清楚这个宏的用途是什么.我错过了什么吗?

Wil*_*ean 11

正如问题所示,你是对的,宏没有做任何事情.

这看起来像编写该代码的人所施加的一些人为结构,可能是为了使常量非常清楚,并且能够搜索它们?我可以看到具有可搜索常量的优势,但这不是实现该目标的最佳方式.

这也可能是其他一些从未实现或仅部分删除的宏方案的一部分.

  • 这不是理智的,一个理智的程序员不会使用"魔术数字",而是"#define SOME_FLOAT 2.0",然后是`x = SOME_FLOAT*y;`.或者甚至更好,使用`const`变量(如果适用). (5认同)
  • const变量不是"更好".它被认为是有害的. (2认同)

npc*_*diu 6

一些(旧的)C编译器不支持const关键字,这个宏很可能是对处理不同编译器的更精细的宏序列的回忆.像这样使用x = CONST(2.0)*y;虽然毫无意义.

您可以从Autoconf文档中查看此部分以获取更多详细信息.

编辑:此宏的另一个目的可能是自定义预处理(例如,用于提取和/或替换某些常量),就像Qt Framework的Meta Object Compiler一样.