如何在char和单字符串常量中重用文字?

时间:2015-04-25 17:13:37

标签: c string

我需要在c代码中指定一个参数短选项(例如-F)作为charchar[]常量。为了最大化代码重用,我想声明一个变量,它允许我在一个地方更改值(“文字” - 不是字符串地说一个字符串或char字面,但在抽象概念的意义上) 。我更倾向于一种解决方案,它只在预处理器常量和函数/宏中或在c代码中专门解决这个问题,以便很好地解释为什么必须在两者的混合中解决这个问题。

我试过/签出了

  • #define FOREGROUND_OPTION_VALUE 'F',这使我无法将其转换为char[](作为预处理器常量)(编写一个用#字符串化的宏会导致'引号字符串化
  • 省略'引号,这使我无法创建'引号或以另一种方式创建char
  • @ PedroWitzel回答声明char[]并使用第0 char作为另一个常量。这很好,但我更喜欢从char[]创建char的方法,因为这会强制两者相等(否则我必须添加char[]的编译时断言不超过1)。

对我来说唯一重要的是代码维护,没有其他的东西(比如处理代码的成本(在编译或运行时期间)如果可能存在并且不关心则没有深入反映)。

2 个答案:

答案 0 :(得分:3)

除了commentsPedro Witzelanswer中的讨论之外,还有另一种选择:

#define FOREGROUND_OPTION_VALUE 'F'

static const char fg_opt_str[] = { FOREGROUND_OPTION_VALUE, '\0' };

这不是常用的初始化字符串的方法,但它是一个有效的方法,似乎适合您的方案。现在,您可以在需要常量char(或int)值的地方使用FOREGROUND_OPTION_VALUE,并在需要单字符字符串的地方使用fg_opt_str。如果你更改了定义的值(比如说f),那么你只需要改变一个地方让代码继续工作,假设你之前没有使用f,这符合你的可维护性要求。

答案 1 :(得分:2)

static constant变量对你有用吗?

static const char FOREGROUND_OPTION_VALUE[] = "F";