为什么三元运算符是我的字符串?

时间:2014-03-10 09:51:42

标签: c++ arduino const

我正在为ATmega328驱动的图形LCD编写一些代码,使用Arduino构建链和Stino作为我的IDE。我有一个功能,可以格式化并显示带有标签的数字。这是功能:

void displayNumber(float value, char* label)

我意识到这两个参数都可以const,但为了保持与其他代码的兼容性,它们就像这样。

如果我按如下方式调用该函数:

displayNumber(externalTemp, "MAX");

工作正常。我理解字符串文字的行为很奇怪,因为它们无法修改(未定义的行为)但它们不会被声明为const char*而是char*

如果我尝试使用三元运算符将参数传递给函数:

displayNumber(externalTemp, animate10s?"MAX":"MIN");

我收到编译错误:

  

从'const char *'无效转换为'char *'

为什么三元运算符const是我的字符串?

专门使用的编译器是avr-gcc / avr-g ++版本4.3.2,与Arduino Beta 1.5.6-r2捆绑在一起。

1 个答案:

答案 0 :(得分:4)

从字符串文字到char *(不包含通常具有的常量)的不推荐的转换(或者直到最近),这是简单调用的工作原理。

三元表达式不是字符串文字,因此无法对其应用转换。

(您最好的解决方案是确保将函数参数正确声明为const char *。)