我需要在c代码中指定一个参数短选项(例如-F
)作为char
和char[]
常量。为了最大化代码重用,我想声明一个变量,它允许我在一个地方更改值(“文字” - 不是字符串地说一个字符串或char
字面,但在抽象概念的意义上) 。我更倾向于一种解决方案,它只在预处理器常量和函数/宏中或在c代码中专门解决这个问题,以便很好地解释为什么必须在两者的混合中解决这个问题。
我试过/签出了
#define FOREGROUND_OPTION_VALUE 'F'
,这使我无法将其转换为char[]
(作为预处理器常量)(编写一个用#
字符串化的宏会导致'
引号字符串化'
引号,这使我无法创建'
引号或以另一种方式创建char
。char[]
并使用第0 char
作为另一个常量。这很好,但我更喜欢从char[]
创建char
的方法,因为这会强制两者相等(否则我必须添加char[]
的编译时断言不超过1
)。对我来说唯一重要的是代码维护,没有其他的东西(比如处理代码的成本(在编译或运行时期间)如果可能存在并且不关心则没有深入反映)。
答案 0 :(得分:3)
除了comments到Pedro Witzel的answer中的讨论之外,还有另一种选择:
#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";