Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Какой смысл формальные параметры функции определять как const?
Отправлено
Vladimir Ljaschko
05 января 2008 г. 23:12
Разбираю чужой пример, не могу понять, что это дает.
void mcp2515_modifyRegister(const uchar address, const uchar mask, const uchar data)
Составить ответ
|
Вернуться на конференцию
Ответы
Не всегда нужно писать __flash, чтобы сказать, что параметр лежит во FLASH - есть компиляторы, которым достаточно const
—
Vit
(06.01.2008 01:47:12
77.123.174.155
, 600 байт)
Все неправильно. Слушайте сюда.
—
Сергей Борщ
(06.01.2008 21:17:27
194.19.225.133
, 970 байт)
Не выдавайте, плз, желаемое за действительное.
—
Vit
(06.01.2008 22:32:1
77.123.174.155
, 539 байт)
э-э. restrict это не то :) (+)
—
SM
(06.01.2008 06:07:26
80.92.255.53
, 885 байт)
Насчёт restrict - в Ch это именно то, что я сказал. И это не совсем C :) - чегой-то вааще не припоминаю такой модификатор в компилерах для камушков
—
Vit
(06.01.2008 15:03:52
77.123.174.155
, 411 байт)
Я думал Ch это какой-то вариант С какой-то фирмы. Сорри, не знал. А модификатор "restrict" описан в ISO/IEC 9899:1999 (ANSI C) и делает именно то, что я сказал. А очень активно используется например при компиляции для 6000-ных TMS-ов для оптимизации программной конвейеризации (это хитрость этого семейства с параллельным вычислением 8-ми операций за такт)
—
SM
(06.01.2008 15:44:47
80.92.255.53
,
пустое
)
Спасибо, поглядим. А Ch - он там ->
—
Vit
(06.01.2008 15:58:12
77.123.174.155
,
пустое
,
ссылка
)
Бывают извращенцы и покруче... Пишут для себя классы, объявляют члены как private, а потом занимаются мазохизмом, чтобы достучаться до них с помощью friend-функций или классов... Долго разбираются почему вдруг программа встает в ступор и бысто увольняются...
—
ETM
(06.01.2008 01:13:32
62.117.85.103
,
пустое
)
Честно говоря, то же пишу так. Хочется верить, что это помогёт оптимизатору кода чего-нить сгенерировать лучше.
—
Сидоргек
(06.01.2008 00:53:37
91.124.147.64
,
пустое
)
А скорее всего это просто предохранительство того же типа, как protected - члены класса. Капкан самому себе, чтоб не трогать то, что трогать низя.
—
Сидоргек
(06.01.2008 00:58:49
91.124.147.64
,
пустое
)
Думаю, что это написано было просто не подумавши, по принципу "шоб було". Const в параметрах функций хорош вместе с указателями - тогда по прототипу сразу видно, что твою переменную там внутри никто не обесчестит (хотя, конечно, всяко бывает, см. ниже пример с приведением типов).
—
Каа
(05.01.2008 23:48:37
85.25.138.222
,
пустое
)
А как делают в случае если наоборот, нужно вернуть через параметр функции смодифицированный указатель? Я лучшего способа, чем передача в функцию параметра указатель на указатель, не нашел.
—
rezident
(06.01.2008 00:21:27
89.148.212.143
,
пустое
)
так и делают :) :) Можно еще указатель на структуру передать, один из членов которой тот указатель.
—
SM
(06.01.2008 00:23:31
80.92.255.53
,
пустое
)
Крысота и лишние букоффки. Это даст еррор при компиляции, если внутри ф-ции Вы им что-то присвоить попытаетесь. То есть const-ом ограничиваете сам себя от изменения переменных-параметров внутри ф-ции и использования их как временных переменных.
—
SM
(05.01.2008 23:18:19
80.92.255.53
,
пустое
)
И еще проблемы обретаете с передачей их куда-нить дальше по ссылке, если тип ссылки не на const.
—
SM
(05.01.2008 23:24:50
80.92.255.53
,
пустое
)
Попробуйте их где нибудь в темном и тихом месте функции "испортить&quo...{+}
—
VasilyS
(05.01.2008 23:15:32
80.92.96.25
, 154 байт)
Дык а смысл? Экономия памяти? Стека? Скорость(функция работает с оригиналами переменных)?
—
Vladimir Ljaschko
(05.01.2008 23:19:58
194.226.120.28
,
пустое
)
нет, создается копия, но без права модификации
—
koyodza
(05.01.2008 23:25:30
77.123.62.213
,
пустое
)
с правом, с правом... Просто для того, чтобы обрести это право придется злостную конструкцию написать типа (+)
—
SM
(05.01.2008 23:33:48
80.92.255.53
, 65 байт)
Только (чар*). И это не есть изменение const-переменной, а изменение област...{+}
—
VasilyS
(05.01.2008 23:37:26
80.92.96.25
, 199 байт)
чертов хтмл. Имел в виду "* (char*) & param = newvalue;"
—
SM
(05.01.2008 23:34:56
80.92.255.53
,
пустое
)
ну это понятно, просто такую конструкцию "случайно по-ошибке" сложнее написать, чем param = newvalue;
—
koyodza
(05.01.2008 23:37:3
77.123.62.213
,
пустое
)
param=newvalue по ошибке написать ровно так же сложно, как и мой вариант. Потому как такое можно написать только если это захотеть. А от случайных "=" вместо "==" и так компиляторы страхуют.
—
SM
(05.01.2008 23:39:27
80.92.255.53
,
пустое
)
если имена переменных похожи, то не так уж и сложно
—
koyodza
(05.01.2008 23:47:17
77.123.62.213
,
пустое
)
ну тут да.... Однако я предпочитаю иметь возможность поюзать переменную подо что-нить другое, когда она уже не нужна по назначению :)
—
SM
(05.01.2008 23:50:19
80.92.255.53
,
пустое
)
+1 И в этом весь смак. А более явно это видно , когда воссоздаёшь в этих беспризорных переменных битовые переменные, которые структурно/функционально переподчиняются в какой-нить иной регистр-переменную. И это даёт возможность сокращать ряд промежуточных процедур.Такой подход даёт некоторую доп. maind-оптимизацию :) отточенным в достаточной степени механизмам программной оптимизации. Этакое псевдо-нейронное :) скольжение составляющих регистров.
—
Макаров
(06.01.2008 01:05:29
83.234.191.2
,
пустое
)
Придумают же извращенцы...
—
Vladimir Ljaschko
(05.01.2008 23:29:30
194.226.120.28
,
пустое
)
умные люди
—
koyodza
(05.01.2008 23:35:29
77.123.62.213
, 430 байт)
Сам стараюсь сократить область видимости переменных, но тут кажется перебором (+)
—
Vladimir Ljaschko
(05.01.2008 23:47:30
194.226.120.28
, 294 байт)
То что в примере чуш - понятно. Никому это не надо. А вот при передаче в фу...{+}
—
VasilyS
(05.01.2008 23:51:48
80.92.96.25
, 228 байт)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 97:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru