|
Помогите новичку, работа с массивами |
|
|
|
 |
Ответов
|
Jan 17 2008, 18:54
|

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

|
Цитата(Сергей Борщ @ Jan 17 2008, 20:53)  Вот и я такое помню, а в корневом посте жалоба на "не пишется", а не на "не компилится". Где-то нас на... обманули  Это я ввел в заблуждение, мой глаз при быстром просмотре воспринял сстрочку while(,,) как for(;;) Но как признался автор, именно это он и хотел написать. Цитата(masterpc @ Jan 17 2008, 14:29)  Виноват , сам уже потом понял. Я и раньше так писал, но забыл. Спасибо!
|
|
|
|
|
Jan 18 2008, 09:04
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jan 18 2008, 09:25
|
Местный
  
Группа: Свой
Сообщений: 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
Я имел в виду именно такой случай.
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|