Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 30.06.2011, 16:41  
ritmauto
Частый гость
 
Регистрация: 11.12.2010
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
ritmauto на пути к лучшему
По умолчанию Вопрос по синтаксису в С

Только начал перелазить с асма на С. Вот наткнулся на проблему:

Если делать так:
--------------
if (условие1 )
действие1;
действие2;
if (условие2 && условие3 )
действие2;
---------------
то всё нормально.

действие2 это довольно большой кусок кода.
Поэтому, чтобы не вставлять его два раза, решил попробовать сделать так:
--------------
if (условие1 )
действие1;
if ((условие1 ) || (условие2 && условие3 ))
действие2;
--------------
не работает.
Похоже что связка if ((условие1 ) || (условие2 && условие3 )) как-то не так компилится. А почему?
Реклама:

Последний раз редактировалось ritmauto; 30.06.2011 в 16:53.
ritmauto вне форума  
Сказали "Спасибо" ritmauto
warel (28.06.2019)
Непрочитано 30.06.2011, 17:14  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

Сообщение от ritmauto Посмотреть сообщение
Только начал перелазить с асма на С. Вот наткнулся на проблему:

Если делать так:
--------------
if (условие1 )
действие1;
действие2;
if (условие2 && условие3 )
действие2;
---------------
то всё нормально.

действие2 это довольно большой кусок кода.
Поэтому, чтобы не вставлять его два раза, решил попробовать сделать так:
--------------
if (условие1)
действие1;
if ((условие1) || (условие2 && условие3))
действие2;
--------------
не работает.
Похоже что связка if ((условие1 ) || (условие2 && условие3 )) как-то не так компилится. А почему?
По первому коду у вас действие2 будет выполняться ВСЕГДА, а согласно второму правилу еще и дважды.
Код:
if(условие1) действие1;
действие2;
if(условие2 && условие3) действие2;
Вы действительно так хотите? Или забыли про операторные скобки?
Насчет "большого куска кода" - оформите в виде функции, сможете вызывать сколько угодно раз. Но с логикой советую разобраться. У вас в примере она хромает.
Рекомендую правильно форматировать текст, будет понятнее в чтении.

Последний раз редактировалось ut1wpr; 30.06.2011 в 17:16.
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 30.06.2011, 17:17  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Ну, так у вас

Сообщение от ritmauto Посмотреть сообщение
Только начал перелазить с асма на С. Вот наткнулся на проблему:

Если делать так:
--------------
if (условие1 )
действие1;
действие2;
if (условие2 && условие3 )
действие2;
---------------
то всё нормально.

действие2 это довольно большой кусок кода.
Поэтому, чтобы не вставлять его два раза, решил попробовать сделать так:
--------------
if (условие1 )
действие1;
if ((условие1 ) || (условие2 && условие3 ))
действие2;
--------------
не работает.
Похоже что связка if ((условие1 ) || (условие2 && условие3 )) как-то не так компилится. А почему?
в первом варианте действие1 выполняется вначале безусловно, в не зависимости от условия1. Разберитесь сначала с тем, что именно вам нужно. Нарисуйте алгоритм на уровне квадратиков, тогда сразу станет ясно. Или нет?
PS: можете выложить кусок ассемблерного кода здесь. Авось общими усилиями разберемся.
Bill вне форума  
Сказали "Спасибо" Bill
warel (28.06.2019)
Непрочитано 30.06.2011, 17:19  
hostel6psu
Частый гость
 
Регистрация: 23.08.2007
Сообщений: 27
Сказал спасибо: 1
Сказали Спасибо 28 раз(а) в 13 сообщении(ях)
hostel6psu на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

все что в "действие2" загнать в функцию. тогда два раза ничего не вставится. будет только вызов ф-ии.
hostel6psu вне форума  
Сказали "Спасибо" hostel6psu
warel (28.06.2019)
Непрочитано 30.06.2011, 17:25  
ritmauto
Частый гость
 
Регистрация: 11.12.2010
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
ritmauto на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

Сообщение от ut1wpr Посмотреть сообщение
По первому коду у вас действие2 будет выполняться ВСЕГДА, а согласно второму правилу еще и дважды.
Код:
if (условие1) действие1;
действие2;
if (условие2 && условие3) действие2;
Вы действительно так хотите? Или забыли про операторные скобки?
Насчет "большого куска кода" - оформите в виде функции, сможете вызывать сколько угодно раз. Но с логикой советую разобраться. У вас в примере она хромает.
Рекомендую правильно форматировать текст, будет понятнее в чтении.
Забыл про скобки, сорри.
Вот так правильно:
Код:
if (условие1) 
{
   действие1;
   действие2;
}
if (условие2 && условие3) действие2;
Насчет "большого куска кода" - оформить в виде функции - можно.
Просто хотел понять почему не работает так:
Код:
if (условие1) действие1;

if ((условие1) || (условие2 && условие3)) действие2;
Причем! Выяснил - из ((условие1) || (условие2 && условие3)) не отрабатывает только первая часть ИЛИ. По второй части отработка нормальная.

Последний раз редактировалось ritmauto; 30.06.2011 в 17:41.
ritmauto вне форума  
Сказали "Спасибо" ritmauto
warel (28.06.2019)
Непрочитано 30.06.2011, 21:40  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

Сообщение от ritmauto Посмотреть сообщение
Выяснил - из ((условие1) || (условие2 && условие3)) не отрабатывает только первая часть ИЛИ. По второй части отработка нормальная.
Проверяйте само условие. В приведенном примере ошибки нет.
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 30.06.2011, 22:14  
ritmauto
Частый гость
 
Регистрация: 11.12.2010
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
ritmauto на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

Сообщение от ut1wpr Посмотреть сообщение
Проверяйте само условие. В приведенном примере ошибки нет.
Хм.. Так первый вариант же работает отлично. Т.е. Условие1 отрабатывается нормально.
вот думаю - не может это конкретный компилятор дурить (Keil), какие-то его установки?? С получающимся ассемблером пока не разбирался.

Последний раз редактировалось ritmauto; 30.06.2011 в 22:20.
ritmauto вне форума  
Сказали "Спасибо" ritmauto
warel (28.06.2019)
Непрочитано 30.06.2011, 22:31  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Интересно, но начинающие почему-то

Сообщение от ritmauto Посмотреть сообщение
Хм.. Так первый вариант же работает отлично. Т.е. Условие1 отрабатывается нормально.
вот думаю - не может это конкретный компилятор дурить (Keil), какие-то его установки?? С получающимся ассемблером пока не разбирался.
прежде всего грешат на компилятор.
Bill вне форума  
Сказали "Спасибо" Bill
warel (28.06.2019)
Непрочитано 30.06.2011, 22:54  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

Сообщение от ritmauto Посмотреть сообщение
Хм.. Так первый вариант же работает отлично. Т.е. Условие1 отрабатывается нормально.
вот думаю - не может это конкретный компилятор дурить (Keil), какие-то его установки?? С получающимся ассемблером пока не разбирался.
Не надо людям голову морочить, приведите текст условий. Смоделируем, посмотрим. Чего гадать? Условие1 - это еще не условие..
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 30.06.2011, 23:09  
E_C_C
Почётный гражданин KAZUS.RU
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Вопрос по синтаксису в С

Может дело в приоритетах операций ? приоритет лог И выше чем лог ИЛИ.
Поставьте вместо условия1 единицу или true ( как там в Вашем компиляторе), действие2 должно выполниться в любом случае.

Код:
if ((1) || (условие2 && условие3)) действие2;
оффтоп - как ,черт возьми ,все путем было в Паскале , четко стройно ,алгоритмично.
__________________
Да здравствует Разум,да сгинет Маразм!

Последний раз редактировалось E_C_C; 30.06.2011 в 23:15.
E_C_C вне форума  
Сказали "Спасибо" E_C_C
warel (28.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по схеме USBBit 1.1 (FT232RL) Jivchic Микроконтроллеры, АЦП, память и т.д 3 09.06.2011 10:50
Вопрос по EEPROM begun Микроконтроллеры, АЦП, память и т.д 17 03.11.2010 23:44
Вопрос По Tas5414a (Входной модуль) C-r-o-w Аудиотехника 0 08.11.2009 18:11
вопрос из детства spilberg Отвлекитесь, эмбеддеры! 9 03.07.2009 14:01


Часовой пояс GMT +4, время: 10:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot