реклама на сайте
подробности

 
 
> Помогите новичку, работа с массивами
masterpc
сообщение Jan 17 2008, 08:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788



Подскажите, что может быть:

Пишу вот так:

byte k;
while(k=0, k<9, k++) sens[0][k]=0xff;


Ничего в массив не пишется,
а если написать так:

sens[0][0]=0xff;
sens[0][1]=0xff;
sens[0][2]=0xff;
sens[0][3]=0xff;
sens[0][4]=0xff;
sens[0][5]=0xff;
sens[0][6]=0xff;
sens[0][7]=0xff;
sens[0][8]=0xff;
- то все ок.

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

Спасибо!

Сообщение отредактировал masterpc - Jan 17 2008, 08:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Jan 17 2008, 18:54
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Сергей Борщ @ Jan 17 2008, 20:53) *
Вот и я такое помню, а в корневом посте жалоба на "не пишется", а не на "не компилится". Где-то нас на... обманули wink.gif

Это я ввел в заблуждение, мой глаз при быстром просмотре воспринял сстрочку
while(,,) как for(;;)

Но как признался автор, именно это он и хотел написать.
Цитата(masterpc @ Jan 17 2008, 14:29) *
Виноват , сам уже потом понял. Я и раньше так писал, но забыл. Спасибо!
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 18 2008, 05:58
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



С запятыми в IAR AVR вообще интересная штука. Начиная с 4 версии в режиме С++ спокойно компилятором глотается запятая вместо классической точки запятой. Вопрос - это стандарт или особенность IAR. Оригинала стандарта под рукой нет.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 18 2008, 09:04
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(VladimirYU @ Jan 18 2008, 07:58) *
Начиная с 4 версии в режиме С++ спокойно компилятором глотается запятая вместо классической точки запятой
Возможно вы просто не знали, что в С и С++ существует оператор "запятая". Вот что нам пишут о нем K&R в главе 3:
Цитата
Последней операцией языка "C" является запятая ",", которая чаще всегоиспользуется в операторе for. Два выражения, разделенные запятой,вычисляются слева направо, причем типом и значением результата являются тип и значение правого операнда. Таким образом, в различные части оператора for можно включить несколько выражений, например, для параллельного изменения двух индексов. Это иллюстрируется функцией reverse(s), которая располагает строку s в обратном порядке на том же месте.

Запятые, которые разделяют аргументы функций, переменные в описаниях и т.д., не имеют отношения к операции запятая и не обеспечивают вычисленийслева направо.
Оператор "запятая" может применяться и вне циклов. Не удержусь и приведу пример, который в 2002 ReAl выкладывал в ru.embedded. Я периодически медитирую над этим куском кода, но "почувствовать" его до конца пока не могу:
Цитата
У меня время от времени встречаются вещи типа
Код
   if(  ( func1(), condition1 )
     || ( func2(), condition2 )
     || ( func3(), condition3 )
   ) {
      some_error_processing;
   }
которые без запятой приходилось бы писать как
Код
   func1();
   if( condition1 ) {
      some_error_processing;
   } else {
      func2();
      if( condition2 ) {
         some_error_processing;
      } else {
         func3();
         if( condition3 ) {
           some_error_processing;
         }
      }
   }
Или как-то по другому, но все равно многоэтажная конструкция.
На _мой_ взгляд - через запятую это гораздо нагляднее и управляемее.
Я считаю, что такая запись как раз уменьшает размер глюкодрома, хотя
многие ругают С как раз за возможность такого рода записей :-)

IMHO и
Код
  while( small_code, condition) {
    code;
  }
выглядит лучше, чем
Код
  small_code;
  while( condition) {
    code;
    small_code;
  }
так как в первом варианте четче прослеживается связь между
small_code и проверкой условия, а также то, что small_code должен
выполняться перед code, что это не завершающие операции code, а
предшествующие проверке.


P.S. Надеюсь, ReAl не обидится на меня за цитирование без разрешения.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 18 2008, 09:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



А если вне циклов, найдите отличия:
Классика:
94 InputBuffer[0] = 0xab;
\ 0000002A EA0B LDI R16, 171
\ 0000002C 01FD MOVW R31:R30, R27:R26
\ 0000002E 8305 STD Z+5, R16
95 InputBuffer[1] = 0x55;
\ 00000030 E505 LDI R16, 85
\ 00000032 01FD MOVW R31:R30, R27:R26
\ 00000034 8306 STD Z+6, R16

Запятая:
94 InputBuffer[0] = 0xab,
95 InputBuffer[1] = 0x55;
\ 0000002A EA0B LDI R16, 171
\ 0000002C 01FD MOVW R31:R30, R27:R26
\ 0000002E 8305 STD Z+5, R16
\ 00000030 E505 LDI R16, 85
\ 00000032 01FD MOVW R31:R30, R27:R26
\ 00000034 8306 STD Z+6, R16

Я имел в виду именно такой случай.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- masterpc   Помогите новичку   Jan 17 2008, 08:24
- - KRS   А как сам массив описан? IAR особенно при включенн...   Jan 17 2008, 08:30
- - CSB   У меня в IAR 3.42A правильно работает так: Кодint ...   Jan 17 2008, 08:56
- - VladimirYU   Цитата(masterpc @ Jan 17 2008, 12:24) Под...   Jan 17 2008, 09:02
- - masterpc   Вот такая запись помогла: byte k=0; ...   Jan 17 2008, 09:11
|- - KRS   Цитата(masterpc @ Jan 17 2008, 12:11) Вот...   Jan 17 2008, 09:26
|- - masterpc   Цитата(KRS @ Jan 17 2008, 11:26) Vladimir...   Jan 17 2008, 09:32
|- - KRS   Цитата(masterpc @ Jan 17 2008, 12:32) С ...   Jan 17 2008, 10:01
||- - Сергей Борщ   Цитата(KRS @ Jan 17 2008, 12:01) Конечно ...   Jan 17 2008, 10:26
|- - Baser   Цитата(masterpc @ Jan 17 2008, 11:32) С ...   Jan 17 2008, 11:20
|- - masterpc   Цитата(Baser @ Jan 17 2008, 13:20) А прав...   Jan 17 2008, 11:29
|- - Сергей Борщ   Цитата(Baser @ Jan 17 2008, 13:20) Примен...   Jan 17 2008, 13:45
- - CSB   С одномерным массивом Ваш вариант "while (k=0...   Jan 17 2008, 09:35
|- - andrew_b   Цитата(CSB @ Jan 17 2008, 12:35) (k=0, k...   Jan 17 2008, 10:12
- - CSB   >И в итоге бесконечный цикл... Именно. Я же не ...   Jan 17 2008, 10:25
- - KRS   Когда я быстро просматривал текст строчки Кодbyte ...   Jan 17 2008, 10:26
- - CSB   >Именно результат k++ будет проверяться в цикле...   Jan 17 2008, 13:56
|- - Сергей Борщ   Цитата(CSB @ Jan 17 2008, 15:56) Возможно...   Jan 17 2008, 14:42
|- - Baser   Цитата(Сергей Борщ @ Jan 17 2008, 16:42) ...   Jan 17 2008, 17:25
|- - Сергей Борщ   Цитата(Baser @ Jan 17 2008, 19:25) Не вол...   Jan 17 2008, 17:53
|- - Сергей Борщ   Цитата(VladimirYU @ Jan 18 2008, 11:25) А...   Jan 18 2008, 09:58
|- - ReAl   Цитата(VladimirYU @ Jan 18 2008, 11:25) А...   Jan 18 2008, 10:49
|- - VladimirYU   Цитата(ReAl @ Jan 18 2008, 14:49) Запятая...   Jan 18 2008, 11:08
- - Freeze Anti   я извиняюсь... прочитал тут дискуссию и не понял о...   Feb 5 2008, 17:24
- - CSB   Цитата(k=0, k<9, k++) - это все 0, т.е. инструк...   Feb 5 2008, 19:09


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016