Почему выдается ошибка, хотя условие if ложно? - PullRequest
0 голосов
/ 25 марта 2020

Почему в этом коде выдается ошибка?

Свойства объектов имеют следующие значения (вывод по методу addGroup()):

####### ADDGROUP ######                                                                                                                                                                            
isBasic: 0                                                                                                                                                                                         
types[0]: Z                                                                                                                                                                                        
####### ADDGROUP ###### 

Так как isBasic равно false и types[0] = Z (как показано в выходных данных выше) ошибка не должна быть выброшена в моем понимании:

void addGroup(int newGroup) {
    cout<<"####### ADDGROUP ######"<<endl;
    cout<<"isBasic: ";
    cout<<isBasic<<endl;

    cout<<"types[0]: ";
    cout<<types[0]<<endl;
    cout<<"####### ADDGROUP ######"<<endl;

  if(isBasic == true && types[0] != 'Z') {
    #error "Sensor defined as basicComponent, type(s) already set. Basic component is either group- OR type-specific but never both!"
  }

  for (int i=0; i < 3; i++){
    if(groups[i] == 99) {
      groups[i] = newGroup;
    break;
    }
  }
}

Ответы [ 2 ]

3 голосов
/ 25 марта 2020

#error является директивой препроцессора. Это происходит во время компиляции и не заботится о вашей активности во время выполнения (такой как ваш if() оператор).

Если вы хотите ошибку во время компиляции, тогда вам нужно использовать такие директивы времени компиляции, как #if.

Если вы хотите получить ошибку времени выполнения, вам нужно использовать сброс времени выполнения, как throw и др.

3 голосов
/ 25 марта 2020

#error является директивой препроцессора. Ошибка всегда будет обработана, если она не будет удалена #if или аналогичной директивой препроцессора.

Предварительная обработка происходит перед компиляцией. Условия выполнения не могут повлиять на него.

...