我正在为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捆绑在一起。
答案 0 :(得分:4)
从字符串文字到char *
(不包含通常具有的常量)的不推荐的转换(或者直到最近),这是简单调用的工作原理。
三元表达式不是字符串文字,因此无法对其应用转换。
(您最好的解决方案是确保将函数参数正确声明为const char *
。)