Расшифруйте вывод компилятора

Тема в разделе "Arduino & Shields", создана пользователем Vetrinus, 3 июл 2016.

  1. Vetrinus

    Vetrinus Гик

    Есть функция, которая объявлена так
    Код (C++):
    void add_var(char *varname, int var)
    Вот, как она вызывается:
    Код (C++):
    add_var("Humidity", Humidity);
    Вот, что по этому поводу говорит компилятор:
    warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    add_var("Humidity", Humidity);

    Как исправить?
     
  2. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    сделай
    string varname

    компилятор говорит, что не может переделать строку в символ.
     
  3. Onkel

    Onkel Гуру

    все правильно, вы вместо указателя на строку дали строку - константу. Объявите нужную строку выше, а на более точный ответ данных маловато. В частности, что функция делает - если аргумент - указатель на строку, то интуитивно кажется что функция что-то в этой строке меняет, например, пишет туда значение Humidity в символьном виде. Тогда совсем очевидно, что нельзя вместо *char брать аргументов constant string. И не используйте одинаковые имена, например назовите переменные HumidityV (в смысле Value) и HumidityS (string).
     
  4. Vetrinus

    Vetrinus Гик

    Это варнинг. Т.е. все он может передать, но раз уж такое объявлено deprecated, мне бы по правильному.
    to Onkel.
    Функция добавляет к строке подстроку вида var_name=var_value.
    Соответственно выглядеть будет так:
    Код (C++):
    add_var("var_name", var_value);
     
  5. Vetrinus

    Vetrinus Гик

    Попытки заменить char* на const String приводят к множественным ошибкам
     
  6. Vetrinus

    Vetrinus Гик

    Решилось так:
    Код (C++):
    add_var(const char* varname, int var_value){
     
  7. Onkel

    Onkel Гуру

    все правильно, в С для atmega переменные в озу и в пзу - разные, и для них и функции соответсвенно разные.
     
  8. fogary

    fogary Гик

    А почему не так:
    Код (C++):
    add_var(char varname[], int var_value) {
     
  9. Onkel

    Onkel Гуру

    В С указатель на массив совпадает с указателем на первый член массива и с много еще чем, что удобно, но различные компиляторы могут по разному понимать такие тонкие штуки. Лучше не экспериментировать, как показал опыт выше.
    пы сы к тому же в мк есть специфика - char из озу и char из flash - разные виды.
     
    Последнее редактирование: 4 июл 2016