picc18, "recursive function calls:", нет рекурсии, нет.

Компилятор выдаёт сабжевое сообщение. Он в чём-то прав, а именно: в данном случае рекурсивный вызов *может быть совершён*, а может и не быть. Логика работы функции такова, что гарантируется, что никаких рекурсий быть не может. Нет, всё не так. НА самом деле функций две и каждая *может* (но не факт что будет) вызывать другую. Логика работы программы не позволяет повторный вызов любой из функций. Но компилятор этого не знает и выдаёт ошибку.

Вопрос: как бы заткнуть это сообщение об ошибке? Генерируемый код меня вполне устраивает. Работать будет.

Reply to
Kirill Frolov
Loading thread data ...

Решение:

  1. Заменяем вызовы function() на pointer_to_function().
  2. Пишем в main: pointer_to_function = function.
  3. Компилируем -- хрен. И как не извращайся с адресом -- тоже хрен.
  4. Меняем тип pointer_to_function. Т.е. вначале он был как у функции, например void f(enum x). Меняем char f(enum x). На код это мало повлияет.
  5. Ура, заработало! Компилятор мы успешно обманули.
Reply to
Kirill Frolov

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded on Thu, 31 Aug 2006 08:29:51

+0000 (UTC):

KF> Компилятор выдаёт сабжевое сообщение. Он в чём-то прав, а именно: KF> в данном случае рекурсивный вызов *может быть совершён*, а может и KF> не быть. Логика работы функции такова, что гарантируется, что KF> никаких рекурсий быть не может. Нет, всё не так. НА самом деле KF> функций две и каждая *может* (но не факт что будет) вызывать другую. KF> Логика работы программы не позволяет повторный вызов любой из KF> функций. Но компилятор этого не знает и выдаёт ошибку.

KF> Вопрос: как бы заткнуть это сообщение об ошибке? Генерируемый код KF> меня вполне устраивает. Работать будет.

Объяви локальные переменные статическими (они все равно статические, только перекрываемые) и ошибки не будет.

dima

formatting link

Reply to
Dmitry Orlov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.