Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
вопрос знатокам СИ
Отправлено
mandigit
(85.140.253.203)
02 марта 2011, г. 11:53
в цикле ащк используются локальные переменные
инициализация переменных одного типа проходит успешно:
for(char mask = 1, idx = 0; mask <<= 1;) {
а при попытке разных типов - ошибочно
for(char mask = 1, char idx = 0; mask <<= 1;) {
как побороть?
Составить ответ
|
Вернуться на конференцию
Ответы
The for-init-statement can be anything that is a valid expression-statement (such as i = 0;) or simple-declaration (such as int i = 0;). The statement int i = 1, double i2 = 0; is not a valid simple-declaration according to the spec, so it is not valid to use with for
-
DASM
(02.03.2011, 12:17:48
89.163.14.219
,
пустое
)
Ответ:
-
DASM
(02.03.2011, 12:19:54
89.163.14.219
,
пустое
,
ссылка
)
это точно оно, значит официальным синтаксисом это, увы, не поддерживается
-
mandigit
(02.03.2011, 12:47:17
85.140.253.203
,
пустое
)
по АНСИ си допускает несколько операций присваивания и итерации, про инициализацию вроде ничего не оговаривается, выносите ее "во вне "
-
RED_DRAGON
(02.03.2011, 12:16:10
213.242.214.185
,
пустое
)
у него ++ явно включен
-
DASM
(02.03.2011, 12:18:28
89.163.14.219
,
пустое
)
операция запятая входит в стандарт СИ без плюсов, а вот определение переменной в блоке- это наверное расширение плюсов.
-
mandigit
(02.03.2011, 12:43:5
85.140.253.203
,
пустое
)
Определять переменных в блоке позволяет обычный Си. А вот в условии цикла - только Си++.
-
Юрий_СВ
(02.03.2011, 13:00:33
213.5.199.158
,
пустое
)
в сях - только до операторов.
-
DASM
(02.03.2011, 13:19:35
89.163.14.219
,
пустое
)
Да. Но судя по тому, что он лепит определение в "условие цикла" (init) - в начале блока его вполне устроит.
-
Юрий_СВ
(02.03.2011, 14:12:52
213.5.199.158
,
пустое
)
а вы влепите определение в начало блока и попробуйте к этому определению обратится в условии цикла.
-
mandigit
(02.03.2011, 14:39:30
85.140.253.203
,
пустое
)
и собсно нахрена это надо кроме запутывания заказчега к примеру :))), количество конечных асм инструкций это не уменьшит
-
RED_DRAGON
(02.03.2011, 12:17:15
213.242.214.185
,
пустое
)
компилятор знает, что эта переменная используется только внутри блока цикла и умеет вне блока использовать эту память для других целей.
-
mandigit
(02.03.2011, 12:48:30
85.140.253.203
,
пустое
)
Тоже не понимаю, зачем вы лепите переменные в условие. Определяйте их в блоке.
-
Юрий_СВ
(02.03.2011, 13:03:22
213.5.199.158
,
пустое
)
в какое условие ?? У него они в init лепятся. У него отсутсвует loop expession - это другой вопрос.
-
DASM
(02.03.2011, 13:27:52
89.163.14.219
,
пустое
)
да, отсутствует. что тут кромольного?
-
mandigit
(02.03.2011, 14:40:27
85.140.253.203
,
пустое
)
ничего
-
DASM
(02.03.2011, 14:42:24
89.163.14.219
,
пустое
)
ф каком? цикл оно и есть блок.
-
mandigit
(02.03.2011, 13:10:51
85.140.253.203
,
пустое
)
Цикл это не блок. Блок - это кусок, ограниченный фигурными скобками. Где тут блок : for(i<5;i++) d
=0; ?
-
Юрий_СВ
(02.03.2011, 14:11:0
213.5.199.158
,
пустое
)
здесь два блока
-
mandigit
(02.03.2011, 14:24:8
85.140.253.203
, 199 байт)
если это вызывается не в main() то похер где объявить - всё равно локальная будет переменная. Либо так...
-
POV
(02.03.2011, 13:28:54
217.150.45.109
, 215 байт)
не, не похер - глубина стека будет разная
-
mandigit
(02.03.2011, 14:25:27
85.140.253.203
,
пустое
)
у тебя запятая. а д.б. точка с запятой. но это неправильно. значит нужно делать по другому
-
LordN
(02.03.2011, 12:02:22
90.188.89.85
,
пустое
)
не, я первый пример указал рабочий полностью, запятая - это обычный оператор.
-
mandigit
(02.03.2011, 12:56:16
85.140.253.203
,
пустое
)
А где там разные типы?
-
POV
(02.03.2011, 11:56:25
217.150.45.109
,
пустое
)
считаем, что вторая переменная другого типа, одинаковые я поставил, что-бы упростить ситуацию.
-
mandigit
(02.03.2011, 12:43:56
85.140.253.203
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
если прибавить четыре к четырём будет:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru