|
Не корректная работа цикла в CodeVision |
|
|
|
Sep 11 2011, 14:14
|
Профессионал
    
Группа: Свой
Сообщений: 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 такой же косяк. Или я, что то не понимаю?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Sep 11 2011, 16:40
|
Участник

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

|
А как ЭТО понимать ? Цитата(Iptash @ Sep 11 2011, 17:14)  program[i]= ee_prog[i]; Это Си++ ?
Сообщение отредактировал Юрий_СВ - Sep 11 2011, 16:41
|
|
|
|
|
Sep 11 2011, 17:38
|
Участник

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

|
Цитата(Iptash @ Sep 11 2011, 19:46)  Нет, я из EEPROM загружаю в SRAM. Структуру или указатель на неё ?
|
|
|
|
|
Sep 11 2011, 17:45
|
Участник

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

|
Цитата(Iptash @ Sep 11 2011, 20:41)  Структуру. Значит вам надо внимательнее читать книжки по Си.
|
|
|
|
|
Sep 11 2011, 18:05
|
Участник

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

|
Цитата(Палыч @ Sep 11 2011, 21:01)  В языке Си структуры копируются оператором присваивания. И давно так ?  Тогда, наверное, мне пора за книжки.  Я думал, что имя структуры - это указатель и данное действие не что иное, как копирование указателя. Такие фокусы (копирование структур присваиванием) возможны только в Си++.
Сообщение отредактировал Юрий_СВ - Sep 12 2011, 01:22
|
|
|
|
|
Sep 11 2011, 18:29
|
Участник

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

|
Цитата(Палыч @ Sep 11 2011, 21:22)  С тех пор, как K&R придумали язык Си. Цитата Керниган, Ричи. Язык C
6.2 . Структуры и функции ... В языке "C" существует ряд ограничений на использование структур. Обязательные правила заключаются в том, что единс- твенные операции, которые вы можете проводить со структура- ми, состоят в определении ее адреса с помощью операции & и доступе к одному из ее членов. Это влечет за собой то, что структуры нельзя присваивать или копировать как целое, и что они не могут быть переданы функциям или возвращены ими. http://www.lucky.net/docs/kernigan.htmlhttp://ahdl-altera.narod.ru/ru/richi_c.pdf
Сообщение отредактировал Юрий_СВ - Sep 11 2011, 18:50
|
|
|
|
|
Sep 11 2011, 18:49
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Ну в ANSI C (C89, 1989 год) это уже было. Соответственно, должно было быть во втором издании K&R, которое уже базировалось на принятом стандарте. Ну вот для определенности из стандарта C89 Цитата 3.3.16.1 Simple assignment Constraints One of the following shall hold:/42/ ... * the left operand has a qualified or unqualified version of a structure or union type compatible with the type of the right; Цитата 3.3.15 Conditional operator Syntax conditional-expression: logical-OR-expression logical-OR-expression ? expression : conditional-expression
Constraints The first operand shall have scalar type. One of the following shall hold for the second and third operands: ... * both operands have compatible structure or union types; Т.е. можно вообще Код struct foo a, b, c; a = flag ? b : c; А с возвратом структур из функций -- так даже так (и это C, а не C++, и это 1989 год): Цитата 3.3.2.3 Structure and union members ... Example If f is a function returning a structure or union, and x is a member of that structure or union, f().x is a valid postfix expression but is not an lvalue.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Sep 11 2011, 19:36
|
Участник

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

|
Цитата(ReAl @ Sep 11 2011, 21:49)  Ну в ANSI C (C89, 1989 год) это уже было. Соответственно, должно было быть во втором издании K&R, которое уже базировалось на принятом стандарте. Спасибо, кажись, разобрался. http://www2.research.att.com/~bs/siblings_short.pdfЦитата Classic C is K&R C [Kernighan,1978] plus structure assignment, enumerations, and void. Да, я был не прав. В современной редакции Си присваивать структуры можно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|