22.11.2013, 11:34
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Вопрос по Keil uVision
Вопрос по компилятору Keil:
пишу:
Цитата:
|
int main(void)
{
Init();
LCD_init(); // инициализация порта
LCD_wrAdr (0);
LCD_wrChar(0);
LCD_wrChar(1);
u8 cnt=0;
............
|
в итоге ошибка в строке "u8 cnt=0;":
error: #268: declaration may not appear after executable statement in block
убираю в конце строки u8 cnt=0; и ставлю в начало блока - все ОК!
Хочу разобраться, т.к. не в одном компиляторе не сталкивался с таким правилом. Что за стандарт описания переменных и где он задается ?
Последний раз редактировалось MaxiMuz79; 22.11.2013 в 12:13.
|
|
|
|
22.11.2013, 11:46
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Вопрос по Keil uVision
Обычный стандарт - сначала объявляется/описывается, потом используется. Просто некоторые компиляторы допускают некоторые вольности и при переносе на другую платформу/МК/компилятор это всё и всплывает.
|
|
|
|
22.11.2013, 12:11
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Вопрос по Keil uVision
Сообщение от nahimovv
|
Обычный стандарт - сначала объявляется/описывается, потом используется.
|
Так в первом и втором случае все так и выполняется. Но в первом случ. обьявление u8 cnt=0; после вызова функций (в которых данная переменная ни как не может быть задействована) , а во втором в самом начале блока.
Последний раз редактировалось MaxiMuz79; 22.11.2013 в 12:19.
|
|
|
|
22.11.2013, 13:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопрос по Keil uVision
Сообщение от MaxiMuz79
|
Так в первом и втором случае все так и выполняется. Но в первом случ. обьявление u8 cnt=0; после вызова функций (в которых данная переменная ни как не может быть задействована) , а во втором в самом начале блока.
|
Вам же однозначно сказали, после любой исполняемой команды, не обязательно вызов функции да еще с применением этой переменной. Хотите иметь такую радость, как в теле объявлять переменную с типом - включите поддержку плюсов. Нет поддержки? Извините, пишите, как того требует стандарт K&R. ИАР поддерживает. Кейл не знаю, мало работал в нем.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
22.11.2013, 15:20
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Вопрос по Keil uVision
Сообщение от MaxiMuz79
|
после вызова функций (в которых данная переменная ни как не может быть задействована)
|
Ещё раз! Стандарт СИ подразумевает определённые правила оформления, последующие раширения стандарта СИ допускают некоторые отклонения от основного стандарта, старенький НI-TECH сразу выдал ошибку на "отсутствие закрывающей скобки предыдущей функции", Cosmic под STM8 тоже вываливается с ошибкой. Поэтому утверждать, что только Keil что-то там неправильно понимает или делает, как минимум, не верно. Не используйте особенности компиляторов и при переносе текста проги на другую платформу/МК "будет вам счастье".
Последний раз редактировалось nahimovv; 22.11.2013 в 15:23.
|
|
|
|
06.06.2014, 15:59
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Вопрос по Keil uVision
Какой стандарт используется в MDK Keil v4.72 ? С89 или С99 ? И есть ли возможность менять их ?
|
|
|
|
06.06.2014, 16:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Вопрос по Keil uVision
Правила хорошего тона - когда все переменные объявляются в самом начале вместе с инклудами и дефайнами, или сразу после этой { кавычки. А не как в анекдоте "Я, белокурая лохудра на розовой Мазде, повернула куда захотела, и тем самым спровоцировала ДТП. С моих слов записано верно"...
Так и самому потом проще разбираться, а не выискивать по всему коду, где и как объявил переменную...
|
|
|
|
06.06.2014, 16:29
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Вопрос по Keil uVision
Сообщение от MaxiMuz79
|
Какой стандарт используется в MDK Keil v4.72 ? С89 или С99 ? И есть ли возможность менять их ?
|
Задайте в настройках проекта опцию --c99, тогда будет С99, или --c90, тогда будет С90 (это у него по умолчанию)
Цитата:
|
The compiler:
Is an optimizing compiler. Command-line options enable you to control the level of optimization.
Compiles:
ISO Standard C:1990 source
ISO Standard C:1999 source
ISO Standard C++:2003 source.
|
|
|
|
|
27.06.2014, 10:20
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Вопрос по Keil uVision
Добрый день Уважаемые
Каким Кейлом открыть проэкт
PHP код:
|
proj.plg
proj.uvgui.andrej
proj.uvopt
proj.uvproj
|
это те файлы что есть, ну кроме исходников и хидеров
скачал 8.16 (( надо переносить((
пробовал перенести в ИАР ругается на кучу синтаксиса(обьявление прериваний переменных...)
А надо всего то подправить одну константу и скомпилить заново((
Посоветуйте Куда перенести наиболее быстрее будет
Гранд мерси!
|
|
|
|
21.07.2015, 12:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Вопрос по Keil uVision
Вопрос по Keil (4.7, но, наверное, не столь важно).
Использую: y=__REV16(x);
Все компилится, но в текстовом редакторе __REV16 подчеркнуто и восклицательный знак, типа "implicit declaration".
При компиляции же никаких варнингов не выкидывает.
Посмотрел, __REV16 объявлена в core_cmInstr.h, включил include - не помогло, все также.
Может дефайн какой прописать надо?
В принципе то не особо напрягает, но хотелось бы, чтобы было все эстетично, без подчеркиваний в тексте
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:36.
|
|