Ошибка: ISO C++ forbids comparison between pointer and integer [-fpermissive]

Kylight
Offline
Зарегистрирован: 21.10.2019

Выдает ошибку:

\dany.ino: In function 'void loop()':

\dany.ino:63:14: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]

Вот сам код:

#include "DHT.h"                // подключаем библиотеку DHT.h
#define DHTPIN 6               // тот самый номер пина, о котором упоминалось выше
#define DHTTYPE DHT11           // определяем тип датчика
DHT dht(DHTPIN, DHTTYPE);       // инициация датчика

#include <Servo.h>              // подключаем библиотеку Servo.h
Servo servoPrivod;              // "называем" сервопривод
#define servo 7                // определям пин, к которому подключен сервопривод

#define MODULE_P 8             // Определяем пин нагревательного элемента

#define PUMP_AMOUNT 4           // Определяем количесво помп
#define START_PIN 2             // Определяем старотовый пин

byte pump_pins[PUMP_AMOUNT];    // Массив для пинов помп
int val[PUMP_AMOUNT];           // Массив для  влажности

#define led 11                  // пин светодиода

#include <OneWire.h>            // подключаем библиотеку
OneWire ds(10);                 // пин датчика темпеатуры

#define nas 9                   // пин насоса

void setup() 
{
  Serial.begin(9600);           // Включаем предачу по последовательному порту

  pinMode(DHTPIN, OUTPUT);      // Включаем DHT модуль     
  dht.begin();              
  
  servoPrivod.attach(servo);    // определяем пин сервопривода сервопривод (13 пин)

  pinMode(MODULE_P, OUTPUT);    // включаем пин нагревательного модуля
  digitalWrite(MODULE_P, HIGH); // выключаем модуль

  pinMode(led, OUTPUT);         // подключение лампочки

  pinMode(nas, OUTPUT);         // подключение насоса
  
  for (byte i = 0; i < PUMP_AMOUNT; i++)              // настройка помп и не только
  {            
    pump_pins[i] = START_PIN + i;                     // пробегаем по всем помпам
    pinMode(START_PIN + i, OUTPUT);                   // настраиваем пины, к которым подключены помпы
    digitalWrite(START_PIN + i, HIGH);                // выключаем от греха
    val[i] = 0;                                       // присваиваем каждой переменной владности 0
  }

}
void loop() 
{
  for(byte i = 0; i < PUMP_AMOUNT; i++)       // цикл для управления помпами
  {
    val[i] = analogRead(i);                   // считываем показания с i-го датчика
    val[i] = map(val[i], 327, 1023,100, 0);   // обработка сигнала
    Serial.println(val[i]);                   // передаем показания на последовательный порт
  }

  int vl1 = (val[1] + val[2] + val[3])/3;        // считаем среднюю влажность почвы
  
  for(byte i = 0; i < PUMP_AMOUNT; i++)       // цикл для управления помпами
  {
    if(val < 40)                           // условие включения помпы
    {       
      digitalWrite(pump_pins[i], LOW);    
      delay(5000);
      digitalWrite(pump_pins[i], HIGH);
    }
    else
    {
      digitalWrite(pump_pins[i], HIGH);
  }
}

  delay(500);

  int hv = dht.readHumidity();                   // считываем показания влажности с датчика DHT
  int tv = dht.readTemperature();                // считываем показания температуры с датчика DHT 

  if (isnan(hv) || isnan(tv))                    // проверка исправности датчика DHT
  return; 

  Serial.println(hv);                            // передаем показания на последовательный порт
  Serial.println(tv);                            // передаем показания на последовательный порт

  if (tv > 20 || tv > 20)                        // условия включения сервопривода
  {
    servoPrivod.write(180);
    delay(1000);
  }
  servoPrivod.write(0);

  if(val[0] < 20)                                  // условия срабатываения сигнализатора
  {    
    digitalWrite(led, HIGH);
    delay(1000);
  }
  else
  {
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
  }   
   //считываем показания сдатчика температуры
   byte i;
   byte data[12];
   byte addr[8];
   float celsius;
   // поиск датчика
   if ( !ds.search(addr)) 
   {
      ds.reset_search();
      delay(250);
      return;
   }
   ds.reset();
   ds.select(addr);
   ds.write(0x44, 1); // измерение температуры
   delay(1000);
   ds.reset();
   ds.select(addr); 
   ds.write(0xBE); // начало чтения измеренной температуры
   //показания температуры из внутренней памяти датчика
   for ( i = 0; i < 9; i++) 
   {
       data[i] = ds.read();
   }
   int16_t raw = (data[1] << 8) | data[0];
   // датчик может быть настроен на разную точность, выясняем её 
   byte cfg = (data[4] & 0x60);
   if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
   else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
   else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
   // преобразование показаний в градусы Цельсия 
   celsius = (float)raw / 16.0;
   Serial.print("t=");
   Serial.println(celsius);

   //управляем нагревательным элеметом
   if (celsius < 50)
   {
     digitalWrite(MODULE_P, LOW);
     digitalWrite(nas, HIGH);
   }
   else
   {
     digitalWrite(MODULE_P, HIGH);
     digitalWrite(nas, LOW);
   }
}

Что я делаю не так?

sadman41
Offline
Зарегистрирован: 19.10.2016

Не читаете текст ошибки, не смотрите в строку 63 и не думаете за переменную val.

Kylight
Offline
Зарегистрирован: 21.10.2019

Да, большое спасибо, невнимательно код редактировал

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Просьба подсказать по C

есть код, все хорошо работает, но есть предупреждения, Arduino IDE 1.8.9

#define max_count_list_operators (byte)6
#define max_size_op_code (byte)7
#define max_size_op_short (byte)10
char* opCode[max_count_list_operators][max_size_op_code];
char* opShort[max_count_list_operators][max_size_op_short];
char opMain[max_size_op_short];
char* opPrioritet[] = {(char*)"25001", (char*)"25099", (char*)"25002", (char*)"25020"};
byte opStart = 0; // MTS
char opReal[max_size_op_short + max_size_op_code];
byte opCSQ;
char opTxtCSQ[4];

byte opStepMain, opCount, opNumStep;

void getPrefOp() {
  memset(opMain, '\0', max_size_op_short);
  for (byte i = 0; i < opCount; ++i) {
    byte j = 0;
    while ((opPrioritet[opStart][j] != 0) && (opPrioritet[opStart][j] == opCode[i][j])) ++j;
    if (j == 5) {
      byte k = 0; while (opShort[i][k] != 0) {
        opMain[k] = opShort[i][k]; ++k;
      } opMain[k] = 0;
      break;
    }
  }
  //Serial.print("Main operator = "); Serial.println(opMain);  //         ---------------------DEBUG str-------------------
}


sketch\initmod.h: In function 'void getPrefOp()':

sketch\initmod.h:28:85: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]

     while ((opPrioritet[opStart][j] != 0) && (opPrioritet[opStart][j] == opCode[i][j])) ++j;


-

я сравниваю элемент массива char с байтом, направьте плиз на путь истинный, что написать чтоб этот warning не вылазил?

 

 

mixail844
Offline
Зарегистрирован: 30.04.2012

andycat пишет:

Просьба подсказать по C

есть код, все хорошо работает, но есть предупреждения, Arduino IDE 1.8.9

#define max_count_list_operators (byte)6
#define max_size_op_code (byte)7
#define max_size_op_short (byte)10
char* opCode[max_count_list_operators][max_size_op_code];
char* opShort[max_count_list_operators][max_size_op_short];
char opMain[max_size_op_short];
char* opPrioritet[] = {(char*)"25001", (char*)"25099", (char*)"25002", (char*)"25020"};
byte opStart = 0; // MTS
char opReal[max_size_op_short + max_size_op_code];
byte opCSQ;
char opTxtCSQ[4];

byte opStepMain, opCount, opNumStep;

void getPrefOp() {
  memset(opMain, '\0', max_size_op_short);
  for (byte i = 0; i < opCount; ++i) {
    byte j = 0;
    while ((opPrioritet[opStart][j] != 0) && (opPrioritet[opStart][j] == opCode[i][j])) ++j;
    if (j == 5) {
      byte k = 0; while (opShort[i][k] != 0) {
        opMain[k] = opShort[i][k]; ++k;
      } opMain[k] = 0;
      break;
    }
  }
  //Serial.print("Main operator = "); Serial.println(opMain);  //         ---------------------DEBUG str-------------------
}


sketch\initmod.h: In function 'void getPrefOp()':

sketch\initmod.h:28:85: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]

     while ((opPrioritet[opStart][j] != 0) && (opPrioritet[opStart][j] == opCode[i][j])) ++j;


-

я сравниваю элемент массива char с байтом, направьте плиз на путь истинный, что написать чтоб этот warning не вылазил?

 

 

 

подозреваю что opCode это трехмерный массив (двухмерный массив указателей) а opPrioritet двумерный массив 

м.б. так : (opPrioritet[opStart][j] == *opCode[i][j]) ? 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

щас обновлю Arduino ide попробую, спасибо

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mixail844 пишет:

подозреваю что opCode это трехмерный массив (двухмерный массив указателей) а opPrioritet двумерный массив 

м.б. так : (opPrioritet[opStart][j] == *opCode[i][j]) ? 

помогло, спасибо, ругаться перестал.

завтра проверю на реальном железе

Update: нет, с такими исправлениями код на реальном железе перестал работать.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
char* a
int b

if((int)a==b)....

 

rkit
Offline
Зарегистрирован: 23.11.2016

andycat пишет:

я сравниваю элемент массива char с байтом

Нет, ты сравниваешь char с указателем на char. Что имеет весьма мало смысла.  Могу предположить, что ты пытался реализовать strcmp, но запутался в размерностях массивов.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Не, с размерность у меня все ок, в обоих массива по 5 байт + ноль. По факту да, изобретаю велосипед strcmp.

Попробую поработать с типами данных и указателями, спасибо.

Самое любопытное, на другом компе с такой же IDE warning не появляется, где то отключены, поищу доку.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Не следует путать размер и размерность массива.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

andycat пишет:
Не, с размерность у меня все ок, в обоих массива по 5 байт + ноль. По факту да, изобретаю велосипед strcmp. Попробую поработать с типами данных и указателями, спасибо. Самое любопытное, на другом компе с такой же IDE warning не появляется, где то отключены, поищу доку.

Настройки->сообщения компилятора

Кстати, тогда не понял чем strcmp или memcmp не подходит.

Вообще с типами данных работать не нужно :) ИМХО, нужно стараться так писать, что бы не использовать приведений типа. А то можно такого нахреновертить, 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Я попозже до компа доберусь, опишу более подробно вопрос с примерами. Strcmp для сравнения 5 байт думаю как пушкой по воробьям.
Если кратко, в функцию приходит входящий из модема байт (и тип byte), он заносится в двумерный массив, который описан как char *
Т е я понимаю возмущение компилятора когда я байт заношу в массив char через указатель :)
Но логически и по факту же работает, как мне сказать ему что у меня все правильно?
Причём входящий тип байта исправить не могу, слишком много на него завязано.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кастануть byte переменную к (char)

rkit
Offline
Зарегистрирован: 23.11.2016

andycat пишет:
Strcmp для сравнения 5 байт думаю как пушкой по воробьям.

Нет.

 

andycat пишет:
как мне сказать ему что у меня все правильно?

У тебя неправильно. Ты сравниваешь указатель с char. Тот факт, что код работает, говорит о том, что где-то еще есть ошибка, которая совпадает с этой.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

andycat пишет:
Strcmp для сравнения 5 байт думаю как пушкой по воробьям.

Я не понимаю, откуда такое мнение. Все встроенные функции , лично я  считаю, самыми быстрыми и уже оптимизированными. Правда я бы все же рекомендовал memcmp, поскольку известна длинна строки. Считается что memcmp более надежная, поскольку выход за пределы массива от нее не грозит. Не даром мелкомягкие рекомендуют использовать strncmp.

И еще раз повторю, сказать компилятору, что вы уверены в своих действиях можно явным приведением типа. И компилятору станет наплевать на этот факт. Как это сделать я уже выше показал, да и вам это не я один советовал.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

-  вся простыня, работает ОК

//---initmod.h---

extern void sendIdxATcommand(byte idxCmd, bool clrBuf);
extern void sendATcommand(char * inStr, bool clrBuf);
extern void sendByteToModem(byte inBt);
extern void resetModem();
extern bool findRespFromBuf(char * inStr, byte inByte);
extern void clearRespBuf();

#define max_count_list_operators (byte)6
#define max_size_op_code (byte)6
#define max_size_op_short (byte)10
char* opCode[max_count_list_operators][max_size_op_code];
char* opShort[max_count_list_operators][max_size_op_short];
char opMain[max_size_op_short];
char* opPrioritet[] = {"25001", "25099", "25002", "25020"};
byte opStart = 0; // 0=MTS Work 2=Megafon Debug
char opReal[max_size_op_short * 2];
byte opCSQ;
char opTxtCSQ[4];

byte opStepMain, opCount, opNumStep;

void getPrefOp() {
  for (byte i = 0; i < opCount; ++i) {
    byte j = 0;
    while ((opPrioritet[opStart][j] != 0) && (opPrioritet[opStart][j] == opCode[i][j])) ++j;
    if (j == 5) {
      byte k = 0; while (opShort[i][k] != 0) {
        opMain[k] = opShort[i][k]; ++k;
      } opMain[k] = 0;
      break;
    }
  }
  //Serial.print("Main operator = "); Serial.println(opMain);  //         ---------------------DEBUG str-------------------
}

void processingOperatorsNames(byte stByte) {
  if (!stByte) return;
  switch (opStepMain) {
    case 0: { // begin
        if ((stByte == '(') && (opCount < max_count_list_operators)) {
          ++opStepMain; // go to find id operator
          memset(opShort[opCount], '\0', max_size_op_short);
        }
        break;
      }
    case 1: { // find id operator
        if (isdigit(stByte)) ++opStepMain; /* go to find ,*/ else opStepMain = 0;
        break;
      }
    case 2: { // find ,
        if (stByte == ',') ++opStepMain;/* skip long operator name go to find ,*/ else opStepMain = 0;
        break;
      }
    case 3: { // find ,
        if (stByte == ',') ++opStepMain;/* go to find "*/
        break;
      }
    case 4: { // find "
        if (stByte == '\"') {
          ++opStepMain;/* go to get short name "*/
          opNumStep = 0;
          memset(opShort[opCount], '\0', max_size_op_short);
        } else {
          opStepMain = 0;
        }
        break;
      }
    case 5: { // short name
        if ((opNumStep >= (max_size_op_short - 1)) || (stByte == '\"')) { // end of short name - go to find , or "
          ++opStepMain; // go to find ,
        } else {
          opShort[opCount][opNumStep] = stByte;
          ++opNumStep;
        }
        break;
      }
    case 6: { // find ,
        if (stByte == ',') ++opStepMain;/* go to find "*/
        break;
      }
    case 7: { // find "
        if (stByte == '\"') {
          ++opStepMain;/* go to get code "*/
          opNumStep = 0;
          memset(opCode[opCount], '\0', max_size_op_code);
        } else {
          opStepMain = 0;
        }
        break;
      }
    case 8: { // code
        if ((opNumStep >= (max_size_op_code - 1)) || (stByte == '\"')) { // end of code - go to find "
          ++opStepMain; // go to find "
        } else {
          opCode[opCount][opNumStep] = stByte;
          ++opNumStep;
        }
        break;
      }
    case 9: { // find "
        if (((stByte == '\"') || (stByte == ')')) && (opCount < (max_count_list_operators - 1))) ++opCount; // end processing operator
        opStepMain = 0;
        break;
      }
    default: {}
  }
}

void processingRealOperator(byte stByte) {
  switch (opStepMain) {
    case 0: { // find "
        if (stByte == '\"') {
          memset(opReal, '\0', (max_size_op_short * 2));
          opNumStep = 0; ++opStepMain;
        }
        break;
      }
    case 1: { // get op name
        if ((stByte == '\"') || (opNumStep >= ((max_size_op_short * 2) - 1))) {
          ++opStepMain;
        } else {
          opReal[opNumStep] = stByte; ++opNumStep;
        }
        break;
      }
    default: {}
  }
}

void processingCSQ(byte stByte) {
  if (stByte == ',') { // end str
    if ((opNumStep > 0) && (opNumStep < 3)) {
      opCSQ = atoi(opTxtCSQ); opNumStep = 6;
    }
  } else if (isdigit(stByte)) {
    if (opNumStep < 2) {
      opTxtCSQ[opNumStep] = stByte; ++opNumStep;
    }
  }
}

void initModem(byte inByte, bool inExist) {
  if (!waitRespModem) {
    if ((current_millis - timerWaitCmdModem) >= delayInitModem) {
      sendIdxATcommand(0, true);
    }
  } else {
    if ((current_millis - timerWaitCmdModem) >= delayWaitCmdModem) {
      resetModem(); return;
    }
    if (inByte) {
      switch (stepCmdModem) {
        case 0: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(1, true); ++stepCmdModem;
            } break;
          }
        case 1: {
            if (findRespFromBuf((char *) "SHUT OK\r\n", inByte)) {
              sendIdxATcommand(2, true); ++stepCmdModem;
            } break;
          }
        case 2: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(3, true); ++stepCmdModem;
            } break;
          }
        case 3: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(4, true); ++stepCmdModem;
            } break;
          }
        case 4: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(5, true); ++stepCmdModem;
            } break;
          }
        case 5: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(6, true); ++stepCmdModem;
            } break;
          }
        case 6: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(7, true); ++stepCmdModem;
            } break;
          }
        case 7: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              opCount = 0; opStepMain = 0;
              sendIdxATcommand(26, true); ++stepCmdModem;
            } break;
          }
        case 8: { // processing - save operators to massiv
            if (inExist) processingOperatorsNames(inByte);
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(8, true); ++stepCmdModem;
            } break;
          }
        case 9: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              //                         //         ---------------------DEBUG UNIT-------------------
              /*Serial.print("List operators "); Serial.print(opCount); Serial.println(" :");
                for (byte i = 0; i < opCount; ++i) {
                Serial.print("Operator name = ");
                byte j = 0; while ((opShort[i][j]) > 0) {
                  Serial.write((byte)(opShort[i][j])); ++j;
                } Serial.print(" code = ");
                j = 0; while ((opCode[i][j]) > 0) {
                  Serial.write((byte)(opCode[i][j])); ++j;
                } Serial.println("");
                }*/
              // end DEBUG UNIT
              sendIdxATcommand(9, true); ++stepCmdModem;
            } break;
          }
        case 10: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              getPrefOp();
              sendATcommand("AT+COPS=4,1,\"", false);
              byte k = 0; while (opMain[k] != 0) {
                sendByteToModem(opMain[k]); ++k;
              }
              sendATcommand("\"\r", true);
              ++stepCmdModem;
            } break;
          }
        case 11: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(10, true); ++stepCmdModem;
            } break;
          }
        case 12: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(11, true); ++stepCmdModem;
            } break;
          }
        case 13: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(12, true); ++stepCmdModem;
            } break;
          }
        case 14: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(13, true); ++stepCmdModem;
            } break;
          }
        case 15: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(14, true); ++stepCmdModem;
            } break;
          }
        case 16: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(15, true); ++stepCmdModem;
            } break;
          }
        case 17: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(23, true); ++stepCmdModem;
            } break;
          }
        case 18: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              opStepMain = 0; memset(opReal, '\0', (max_size_op_short * 2));
              sendIdxATcommand(24, true); ++stepCmdModem;
            } break;
          }
        case 19: {
            if (inExist) processingRealOperator(inByte);
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              opCSQ = 0; memset(opTxtCSQ, '\0', 4); opTxtCSQ[0] = '0'; opNumStep = 0;
              sendIdxATcommand(25, true); ++stepCmdModem;
            } break;
          }
        case 20: {
            if (inExist) processingCSQ(inByte);
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(16, true); ++stepCmdModem;
            } break;
          }
        case 21: {
            if (findRespFromBuf((char *) "OK\r\n", inByte)) {
              sendIdxATcommand(17, true); ++stepCmdModem;
            } break;
          }
        case 22: {
            if (findRespFromBuf((char *) "IP GPRSACT\r\n", inByte)) {
              sendIdxATcommand(18, true); ++stepCmdModem;
            } break;
          }
        case 23: {
            if (findRespFromBuf((char *) "\r\n", inByte)) {
              sendIdxATcommand(19, true); ++stepCmdModem;
            } break;
          }
        case 24: {
            if (findRespFromBuf((char *) "IP STATUS\r\n", inByte)) {
              stepCmdModem = 0; deviceMode = modeMainWork; waitRespModem = 0; clearRespBuf();
              mqttStep = mBegin; currentBroker = 0; countErrBroker = 0;
              timerCountErrBroker = current_millis; currentCmd = cmdNone; startReconnectBroker = 0;
#ifdef SHOW_UART_LOG
              Serial.println(F("Ready"));
#endif
              // строка тестирования сброса модема
              // после снятия комментария светодиод модема должен вести себя согласно даташита
              // т е примерно 7...8 секунд пока инициализируется быстрое моргание
              // потом 4...7 секунд несколько медленных вспышек
              // наблюдаем параллельно еще и за монитором порта
              // как только появлется надпись Power ON значит прошел сигнал
              // RESTET на пин - начинаем отсчет
              //delay(1500); resetModem(); // test reset modem // вот эту строку снять комментарий для теста
              // значения мограния светодиода из даташита
              // off - is not running
              // 64 ms ON / 800 ms OFF - not registered the network
              // 64 ms ON / 3000 ms OFF - registered to the network
              // 64 ms ON / 300 ms OFF - GPRS communication is established
            } break;
          }
        default: {}
      }
    }
  }
}

-  отдельная строчка с ошибкой

sketch\initmod.h: In function 'void processingOperatorsNames(byte)':

sketch\initmod.h:74:41: warning: invalid conversion from 'byte {aka unsigned char}' to 'char*' [-fpermissive]

           opShort[opCount][opNumStep] = stByte;

                                         ^~~~~~

- как привести типы чтоб компилятор не ругался?

т е я понимаю что компилятор прав, но как исправить че то никак не додумаюсь

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

brokly пишет:

 я бы все же рекомендовал memcmp, поскольку известна длинна строки.

обязательно попробую и буду использовать как до стенда доберусь, не знал о функции

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
char* opShort[max_count_list_operators][max_size_op_short]

Если вы объявляли массив char, то должно было быть 

char opShort[max_count_list_operators][max_size_op_short]

А так вы объявили массив  указателей на байт :)

И strcmp или memcmp вызывали бы логическую ошибку. Потому что char - это один байт, а char* в вашем случае это два байта.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

да, warning исчез, завтра на железке попробую, спасибо

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

У вас там и opCode так же не правильно объявлен.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

brokly пишет:

У вас там и opCode так же не правильно объявлен.


Да, конечно, я все просмотрю, все warning попытаюсь исправить, спасибо.