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

 
 
> Не корректная работа цикла в CodeVision
Iptash
сообщение Sep 11 2011, 14:14
Сообщение #1


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Здравствуйте все.
Столкнулся с таким косяком. Проверка структуры в WHILE и FOR не работает. Вот например:

Код
while(program[i].indkey != STOP)
    {
        program[i]= ee_prog[i];
        i++;
    }


нет проверки, цикл уходит в бесконечность. Проверяю в AVR studio. А так:
Код
while(st != STOP)
    {
        program[i]= ee_prog[i];
       st =  program[i].indkey;
        i++;
    }

работает. Пробывал в разных версиях. В цикле FOR такой же косяк. Или я, что то не понимаю?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Палыч
сообщение Sep 11 2011, 14:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



В Ваших примерах проверка производится для разных значений переменной i. Если во втором примере поменять местами две последние строки цикла, вот так
Код
while(st != STOP)
    {
        program[i]= ee_prog[i];
        i++;
       st =  program[i].indkey;
    }
то он станет тогда полностью эквивалентным первому примеру
Go to the top of the page
 
+Quote Post
Iptash
сообщение Sep 11 2011, 15:10
Сообщение #3


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Да, действительно, спасибо.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 11 2011, 16:40
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



А как ЭТО понимать ?

Цитата(Iptash @ Sep 11 2011, 17:14) *
program[i]= ee_prog[i];


Это Си++ ?

Сообщение отредактировал Юрий_СВ - Sep 11 2011, 16:41
Go to the top of the page
 
+Quote Post
Iptash
сообщение Sep 11 2011, 16:46
Сообщение #5


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата(Юрий_СВ @ Sep 11 2011, 20:40) *
А как ЭТО понимать ?



Это Си++ ?

Нет, я из EEPROM загружаю в SRAM.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 11 2011, 17:38
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(Iptash @ Sep 11 2011, 19:46) *
Нет, я из EEPROM загружаю в SRAM.

Структуру или указатель на неё ?
Go to the top of the page
 
+Quote Post
Iptash
сообщение Sep 11 2011, 17:41
Сообщение #7


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Структуру.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 11 2011, 17:45
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(Iptash @ Sep 11 2011, 20:41) *
Структуру.

Значит вам надо внимательнее читать книжки по Си.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 11 2011, 18:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Юрий_СВ @ Sep 11 2011, 21:45) *
Значит вам надо внимательнее читать книжки по Си.
А, что Вам не нравится? В языке Си структуры копируются оператором присваивания.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 11 2011, 18:05
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(Палыч @ Sep 11 2011, 21:01) *
В языке Си структуры копируются оператором присваивания.

И давно так ? sm.gif Тогда, наверное, мне пора за книжки. sm.gif
Я думал, что имя структуры - это указатель и данное действие не что иное, как копирование указателя.

Такие фокусы (копирование структур присваиванием) возможны только в Си++.

Сообщение отредактировал Юрий_СВ - Sep 12 2011, 01:22
Go to the top of the page
 
+Quote Post
Iptash
сообщение Sep 11 2011, 18:11
Сообщение #11


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Да нет, это копирование структуры одного типа, а не копирование указателя, все очень легально.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 11 2011, 18:22
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Юрий_СВ @ Sep 11 2011, 22:05) *
И давно так ?

С тех пор, как K&R придумали язык Си.
Go to the top of the page
 
+Quote Post
Idle
сообщение Sep 11 2011, 18:27
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



http://en.wikipedia.org/w/index.php?title=...e%29#Assignment
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 11 2011, 18:29
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(Палыч @ Sep 11 2011, 21:22) *
С тех пор, как K&R придумали язык Си.

maniac.gif
Цитата
Керниган, Ричи. Язык C

6.2 . Структуры и функции
...
В языке "C" существует ряд ограничений на использование
структур. Обязательные правила заключаются в том, что единс-
твенные операции, которые вы можете проводить со структура-
ми, состоят в определении ее адреса с помощью операции & и
доступе к одному из ее членов. Это влечет за собой то, что
структуры нельзя присваивать или копировать как целое, и что
они не могут быть переданы функциям или возвращены ими.


http://www.lucky.net/docs/kernigan.html
http://ahdl-altera.narod.ru/ru/richi_c.pdf


Сообщение отредактировал Юрий_СВ - Sep 11 2011, 18:50
Go to the top of the page
 
+Quote Post
Iptash
сообщение Sep 11 2011, 18:40
Сообщение #15


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

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Да нет,
Цитата
6.2 Структуры и функции
Единственно возможные операции над структурами - это их копирование, присваивание, взятие адреса с помощью & и осуществление доступа к ее элементам. Копирование и присваивание также включают в себя передачу функциям аргументов и возврат ими значений. Структуры нельзя сравнивать. Инициализировать структуру можно списком константных значений ее элементов; автоматическую структуру также можно инициализировать присваиванием.
Go to the top of the page
 
+Quote Post

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

 


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


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