Почему нет ошибки компилятора?

Создал прототип функции с параметром передающимся по значению типа unsigned long,
но описывал функцию с параметром просто long.
Когда вызывал передавал туда тип unsigned long.
Компилятор не выдал ошибку, а только предупреждение, поэтому я не обратил внимание. И теперь думаю, могла моя прога глючить из-за этого? Или где узнать, как воспринимает эту ситуацию машина?
Привожу фрагменты описываемого кода:

// файл 1.h
// какой-то код...
void fAddInActionInRecordMode(actions Action, long param = 0);

void fSendState(StadyWork WorkSt, actions Action, unsigned long param = 0);

// файл main.ino

#include "1.h"
// далее какой-то код

void fSendState(StadyWork WorkSt, actions Action, long param)
{
   String Str1;
  if ((WorkSt == StPlay))
  {
    Str1 = "K43";
  }
}

// вызов функции из другой функции

void fAddInActionInRecordMode(actions Action, long param)
{
  if (stWork == StRec)
  {
      Actions = Action;
      fSendState(stWork, Actions, param);

  }
}


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

Потому что это не ошибка по стандарту, и поведение в этой ситуации четко определено, если только прочитать учебник.

Ну, тогда сами и разбирайтесь что и почему глючит.

1 лайк

В описании языка - правила приведения типов.

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

Но все же, раз компилятор писал
main.ino:4692: warning: undefined reference to `fSendState(StadyWork, actions, unsigned long)',
Значит он не видит ту объявленную функцию из-за несоответствия типа 3 параметра.
Нужно было приводить его и в этом была моя ошибка.
Вот только как он понимал что за функция вызывается, когда я вызывал с 3 параметрами, это вопрос.