[an error occurred while processing this directive]
Это я мучаю Билдер или он меня?(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено misyachniy 19 июня 2006 г. 17:49
В ответ на: Вообще-то, в любом, с точки зрения синтаксиса. Но семантический смысл будет явно не тот, который ожидается. отправлено _Bill 19 июня 2006 г. 17:27

Я хотел написать проверку по "правильному":


if ((v1State==EMPTY) && (v1State==EMPTY)) return(2);
if ((v1State==EMPTY) || (v1State==EMPTY)) return(1);
return(0);

Затем решил проверить как скомпилирует
if (v1State==v2State==EMPTY) return(2);
Компилирует но получается чепуха, при равенстве обоих переменных EMPTY.
По правилам сравнивает в начале v2State==EMPTY в результате получается не 0, а затем сравнивает v1State которое равно 0(EMPTY первый член перечисления) и результат получается равен 0.
То есть false.
С одной стороны это хорошо - не претит духу "С" - доверяйте программисту, но хотябы warning выдал - что сравнивается число и логическое выражение.
Сейчас и синтаксис скобок проверил.
if (v1State==EMPTY && v1State==EMPTY) return(2);
Компилируется правильно - GCC для AVR не пропустил бы из за отсутствия кавычек по отдельным проверкам.
Так что, с легкой переносимостью программ на "С" несколько перевирают.
Во многих книжках char - один байт, а программа от ARM (IAR) вычисления CRC8 не работала на Builder, пришлось пару часов вылавливать где алгоритм не работает так как на ARM.



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru