C stringification:将常量转换为整数

Edw*_*ers 0 c macros stringification stringify

我需要将定义的常量转换为它们的整数值,所以我想出了这个宏(STR_TO_CONST)来做到这一点......

#define STRFY_VAL(s) #s
#define STRFY_KEY(s) STRFY_VAL(s)
#define STR_TO_CONST(s) atoi(STRFY_KEY(s))
Run Code Online (Sandbox Code Playgroud)

它有效,但我想知道它是否有任何潜在的问题,因为我从来没有遇到过这个宏,尽管我已经搜索了类似的东西.

小智 5

你从未遇到过这个问题的原因是它完全没有意义,但让我们通过例子来解释.说你有以下内容:

#define FINALANSWER 42

// ...

int x = 2 * STR_TO_CONST(FINALANSWER);
Run Code Online (Sandbox Code Playgroud)

现在,这在语义上没有区别:

int x = 2 * FINALANSWER;
Run Code Online (Sandbox Code Playgroud)

这是因为预处理器宏最终只是在您实际编译之前发生的文本替换.因此,FINALANSWER就像整数常数一样好42.

您的"解决方案",以一个不存在的问题,只是增加了开销,因为它增加了一个新的字符串常量,将代码和不必要的函数调用为好.

  • 并且使其更难以阅读和维护,因为您必须首先弄清楚宏的作用.当然,这个名字很清楚,但情况并非总是如此. (2认同)
  • 我会在底线上签名,至少对于初学者来说.我想添加*Macros非常好,如果你知道它们是什么时候*;) (2认同)