|
Стиль программирования на Си, описание функции |
|
|
|
Mar 31 2008, 10:23
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Добрый день! Столкнулся со следующей проблемой. нашол код как сделать восемь таймеров написанный Alechin Jan. Первое что кидается в глаза та это синтаксис мне непонятный. Вот к примеру прототип функции остановки тай мера: Код void Stop_Timer(IN IDX timer); ну и сама функция: Код /*--------------------------------------------------------------------------------------------*/ /* Процедура остановки таймера. */ /* Принимает: номер таймера (0 - 7). */ /* Возвращает: ничего не возвращает. */ /*--------------------------------------------------------------------------------------------*/ __monitor void Stop_Timer(IN IDX timer) { Timer[timer].Timer_Ena = TIMER_DIS; return; } Непонятно что такое IDX? Ну IN понятно, направление, очень удобно. IDX по ходу здесь беззнаковый чар. Ну и соответственно вопрос: Этот синтаксис возможен через какоето макроопределение? Может кто знает, подскажите, уверен это интерессно не только мне. Вот ещё пример Код void Start_Timer(IN IDX timer, IN WORD interval, IN pTIMER_FUNC pFunc = NULL, IN bool cycle = TIMER_ONCE); Спасибо.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
 |
Ответов
|
Apr 1 2008, 08:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Но это, повторяю, другое Дальше бессмысленно обсуждать - лучше/хуже, видно/невидно и применять/не применять, рекомендуется/нерекомендуется суть разные вещи. Цитата никакой вменяемый компилятор этого делать не будет для начала вменяемые компиляторы не будут ругаться на передачу в качестве фактического параметра функции const переменной, когда формальный параметр объявлен не const. В "прямоугольных" вариантах применения (таких как Вы показали) действительно интеллект компилятора может быть на высоте. Цитата Думается, что написать ключевое слово 'static' не является слишком обременительным. Вы не поверите  - использую описанные Вами приёмы и не стесняюсь Цитата И в чем они состоят? Насчёт одинаково хорошо http://www.klen.org/Projects/Embeded-gnu-t...last_build.htmlhttp://www.klen.org/Projects/Embeded-gnu-t...gcc-cpp-how.txtА насчёт нюансов использования, например, смотрим пост 7 http://electronix.ru/forum/index.php?showt...;p=247899&#Не то, чтобы я против использования плюсов - этим нужно заниматься(С) Но как раз реализации "плюсовости" у компиляторов гораздо более различны, нежели отклонения в работе их препроцессоров.
--------------------
aka Vit
|
|
|
|
|
Apr 1 2008, 09:28
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(sensor_ua @ Apr 1 2008, 15:17)  Дальше бессмысленно обсуждать - лучше/хуже, видно/невидно и применять/не применять, рекомендуется/нерекомендуется суть разные вещи. Не следует путать приятное с полезным. В одном случае имеем объективные трудности из-за использования низкоуровневого кодирования, которое требует повышенного внимания - это сродни кодированию на ассеблере, за всем надо внимательно следить. Обратная сторона этого - высокая эффективность (малый размер, быстродействие) кода. В другом случае сами себе раскладываем грабли. Которые можно обойти, используя более адекватные средства, получив результат не хуже. Каждый случай использования препроцессора должен быть четко обоснован, и на основании этого сделан вывод, что иные пути дают худший результат или вообще не дают такового. Цитата(sensor_ua @ Apr 1 2008, 15:17)  для начала вменяемые компиляторы не будут ругаться на передачу в качестве фактического параметра функции const переменной, когда формальный параметр объявлен не const. Вы про это: Код const int a = 10; int b;
int g(int x, int y);
int main() { g(a, b); } ? Если да, то вот результат: Код int main() main: { g(a, b); .... LDI R30, LOW(b) .... LDI R31, (b) >> 8 8120 LD R18, Z 8131 LDD R19, Z+1 E00A LDI R16, 10 E010 LDI R17, 0 ........ CALL ??g } Никакой ругани нет. И это не странно, если подумать и понять, что компилятор вполне адекватно оценивает ситуацию и не видит ничего опасного в таком вызове функции. Да и что тут может быть опасного? Ведь передача аргумента делается по значению. Вот если бы была попытка передать указатель (или ссылку) на константный объект, то это была бы ошибка, т.к. такая ситуация может привести к попытке изменить констатный объект внутри вызываемой функции. Но компилятор этого и не разрешает. А если какой-то компилятор разрешает, то это просто его баг и ничего более. Все эти правила стандартизованы и исходят из здравого смысла. Что не так? Цитата(sensor_ua @ Apr 1 2008, 15:17)  В "прямоугольных" вариантах применения (таких как Вы показали) действительно интеллект компилятора может быть на высоте. Хорошо, покажите свои "треугольные" или "круглые" варианты, где в подобной ситуации (с константами) компилятор облажается. Давайте пример в студию, посмотрим его. Интересно. Цитата(sensor_ua @ Apr 1 2008, 15:17)  Вы не поверите  - использую описанные Вами приёмы и не стесняюсь Тогда не понятно, какую точку зрения отстаиваете. Цитата(sensor_ua @ Apr 1 2008, 15:17)  И что конкретно там не так? Я никакого криминала не увидел. Особенно, в части константных объектов - там вообще ни слова не нашел про это. Может, плохо искал?  Цитата(sensor_ua @ Apr 1 2008, 15:17)  А насчёт нюансов использования, например, смотрим пост 7 http://electronix.ru/forum/index.php?showt...=247899�И что? Манглинг имен - обычное дело в С++, жить реально не мешает. И опять совсем не понял, как это мешает использовать константные объекты вместо макросов? Цитата(sensor_ua @ Apr 1 2008, 15:17)  Но как раз реализации "плюсовости" у компиляторов гораздо более различны, нежели отклонения в работе их препроцессоров. Реализации плюсовости у компиляторов отличаются по одной шкале - у одних поддерживаемых фич языка больше, у других - меньше. Но сами фичи если поддерживаются, то поведение дают одинаковое, т.к. есть на все это Стандарт. А вот на препроцессор стандарта нет, препроцессоров действительно существует некоторое количество, и совместимость у них скорее согласно традициям, нежели стандартам.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
sKWO Стиль программирования на Си Mar 31 2008, 10:23 Axxel Цитата(sKWO @ Mar 31 2008, 16:23) Этот си... Mar 31 2008, 10:36 aaarrr Стиль жуткий, не надо так делать.
Цитата(Axxel ... Mar 31 2008, 10:40 defunct ЦитатаЭтот синтаксис возможен через какоето макроо... Mar 31 2008, 10:59 sKWO Цитата(defunct @ Mar 31 2008, 14:59) да, ... Mar 31 2008, 11:56  dxp Цитата(sKWO @ Mar 31 2008, 18:56) Да, тог... Mar 31 2008, 12:16  defunct Цитата(sKWO @ Mar 31 2008, 13:56) Чёта му... Mar 31 2008, 14:17  Axxel Цитата(sKWO @ Mar 31 2008, 17:56) ПОКАЖИ
... Apr 1 2008, 04:30 sensor_ua ЦитатаВо всех случаях, где можно выбирать, предпоч... Mar 31 2008, 12:48 rezident Извиняюсь, что вклиниваюсь.
Цитата(sensor_ua ... Mar 31 2008, 14:13 dxp Цитата(sensor_ua @ Mar 31 2008, 19:48) Пр... Apr 1 2008, 03:41 Alechin Так как кусок кода мой - скажу как это описано у м... Mar 31 2008, 14:08 sensor_ua ЦитатаДля переносимости кода....
IMNHO, совсем неу... Mar 31 2008, 14:39 rezident Цитата(sensor_ua @ Mar 31 2008, 20:39) IM... Mar 31 2008, 14:51 vshemm Есть замечательная книга Алена Голуба "Правил... Mar 31 2008, 15:08 sensor_ua ЦитатаУже были и неоднократно пояснения почему typ... Mar 31 2008, 15:23 sKWO Спасибо, Ребята! Дисскусия разворачивается хор... Mar 31 2008, 16:51 sensor_ua Попробуй таки найти текстовым поиском "#defin... Mar 31 2008, 17:10 rezident Цитата(sensor_ua @ Mar 31 2008, 23:10) По... Mar 31 2008, 17:12 sensor_ua ЦитатаА вот на такое безобразие препроцессор сруга... Mar 31 2008, 17:26 rezident Цитата(sensor_ua @ Mar 31 2008, 23:26) А ... Mar 31 2008, 18:49 sensor_ua Гы Мне код перебивать не нужно. Мне как раз единож... Mar 31 2008, 19:07 Lem препроцессором не рекомендуется пользоваться именн... Mar 31 2008, 20:08 ReAl Цитата(Lem @ Mar 31 2008, 22:08) как во ч... Apr 1 2008, 12:40  dxp Цитата(ReAl @ Apr 1 2008, 19:40) Как прав... Apr 1 2008, 13:50   Сергей Борщ Цитата(dxp @ Apr 1 2008, 16:50) Осталось ... Apr 1 2008, 14:43   ReAl Цитата(dxp @ Apr 1 2008, 15:50) Это где т... Apr 1 2008, 14:51   zltigo Цитата(dxp @ Apr 1 2008, 16:50) А вот в и... Apr 1 2008, 20:44    SasaVitebsk Цитата(zltigo @ Apr 2 2008, 00:44) Рекоме... Apr 1 2008, 22:17     _Pasha Цитата(SasaVitebsk @ Apr 2 2008, 01:17) П... Apr 2 2008, 06:58    ReAl Цитата(zltigo @ Apr 1 2008, 22:44) Самост... Apr 2 2008, 11:55     defunct Цитата(ReAl @ Apr 2 2008, 13:55)
Шаманим... Apr 2 2008, 12:15      ReAl Цитата(defunct @ Apr 2 2008, 14:15) Это я... Apr 2 2008, 12:40       defunct Цитата(ReAl @ Apr 2 2008, 14:40) Фух, а т... Apr 2 2008, 12:43       _Pasha Цитата(ReAl @ Apr 2 2008, 15:40) ...спосо... Apr 2 2008, 18:53     zltigo Цитата(ReAl @ Apr 2 2008, 14:55) По повод... Apr 2 2008, 15:01      sKWO Позволю небольшой отрывок кода, извиняюсь что немн... Apr 2 2008, 16:40 sensor_ua Цитатапрепроцессором не рекомендуется пользоваться... Mar 31 2008, 20:29 _Pasha Цитата(vshemm @ Mar 31 2008, 19:08) Так т... Mar 31 2008, 22:07 sensor_ua ЦитатаУже неоднократно на эту тему проходились, по... Apr 1 2008, 05:53 Dog Pawlowa Цитата(sensor_ua @ Apr 1 2008, 08:53) Про... Apr 1 2008, 06:30 dxp Цитата(sensor_ua @ Apr 1 2008, 12:53) А в... Apr 1 2008, 07:01 _Pasha Пример winavr
Кодeeprom_read_block(&my_var... Apr 1 2008, 06:16 _Pasha Цитата(sensor_ua @ Apr 1 2008, 09:53) К с... Apr 1 2008, 06:33 SasaVitebsk Очень интересная дискуссия развернулась. Но, в общ... Apr 1 2008, 12:48 dxp Цитата(SasaVitebsk @ Apr 1 2008, 19:48) Н... Apr 1 2008, 13:11  ReAl Цитата(dxp @ Apr 1 2008, 15:11) Во всяком... Apr 1 2008, 13:40   defunct Цитата(ReAl @ Apr 1 2008, 15:40) Но ведь ... Apr 2 2008, 09:58    andrew_b Цитата(defunct @ Apr 2 2008, 12:58) Delph... Apr 2 2008, 10:15    Сергей Борщ Цитата(defunct @ Apr 2 2008, 12:58) Прост... Apr 2 2008, 12:34     defunct Цитата(Сергей Борщ @ Apr 2 2008, 14:34) Н... Apr 2 2008, 12:39 Сергей Борщ Цитата(SasaVitebsk @ Apr 1 2008, 15:48) К... Apr 1 2008, 13:15 Lem одним из авторитетов для меня является Герб Саттер... Apr 1 2008, 13:07 sensor_ua ЦитатаНе следует путать приятное с полезным...
Не ... Apr 1 2008, 13:37 SasaVitebsk Вот об этом я и говорю - богатство выбора в рамках... Apr 2 2008, 18:34 singlskv Цитата(SasaVitebsk @ Apr 2 2008, 22:34) С... Apr 2 2008, 19:19 zltigo Цитата(SasaVitebsk @ Apr 2 2008, 21:34) .... Apr 2 2008, 19:30  singlskv Цитата(zltigo @ Apr 2 2008, 23:30) Вы зна... Apr 2 2008, 20:31   zltigo Цитата(singlskv @ Apr 2 2008, 23:31) Да п... Apr 2 2008, 21:51    singlskv Цитата(zltigo @ Apr 3 2008, 01:47) Налицо... Apr 2 2008, 21:55     zltigo Цитата(singlskv @ Apr 3 2008, 00:55) пока... Apr 2 2008, 22:08      singlskv Цитата(zltigo @ Apr 3 2008, 02:08) и убра... Apr 2 2008, 22:37       ReAl Цитата(singlskv @ Apr 3 2008, 00:37) Я же... Apr 2 2008, 22:46        singlskv Цитата(ReAl @ Apr 3 2008, 02:32) Кстати, ... Apr 2 2008, 23:25         ReAl Цитата(singlskv @ Apr 3 2008, 00:55) Так ... Apr 2 2008, 23:45          defunct Цитата(ReAl @ Apr 3 2008, 01:45) Кстати, ... Apr 3 2008, 10:22       zltigo Цитата(singlskv @ Apr 3 2008, 01:37) это ... Apr 3 2008, 05:53     ReAl Цитата(singlskv @ Apr 2 2008, 23:55) с ОД... Apr 2 2008, 22:32  sKWO Цитата(zltigo @ Apr 2 2008, 22:30) Компил... Apr 7 2008, 10:40   ReAl Цитата(sKWO @ Apr 7 2008, 13:40) К пример... Apr 7 2008, 19:43    sKWO Цитата(ReAl @ Apr 7 2008, 22:43) Называет... Apr 8 2008, 11:00 SasaVitebsk Хотя я в NASA не работал, но по слухам там не прим... Apr 2 2008, 19:53 AlexKLm На СИ, правильно когда по-больше зелени (#define),... Apr 2 2008, 21:22 SasaVitebsk Вот я и говорю, что результат практически тот же п... Apr 3 2008, 07:23 ReAl Цитата(SasaVitebsk @ Apr 3 2008, 09:23) В... Apr 3 2008, 08:28 _Pasha Кто о чем, а вшивый - о бане...
Пробегала книжка ... Apr 3 2008, 12:57 sensor_ua Цитатасредствами ИАР это дело обстоит намного прощ... Apr 7 2008, 10:58 sKWO Цитата(sensor_ua @ Apr 7 2008, 13:58) А к... Apr 7 2008, 11:07 sensor_ua Не очень понял, что Вы хотите, но на телесистемах ... Apr 7 2008, 12:51 sKWO спасибо за инфу!! Apr 7 2008, 17:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|