|
void const *argument, Что это? |
|
|
|
 |
Ответов
|
Jan 6 2014, 23:38
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Вообще-то компилятор должен "съедать" этот параметр при вызове функции и без явного преобразования. Как и для параметра "void *" компилятор должен принимать указатель на любой неконстантный объект из соответствующего адресного пространства. Если отказывается, то это наверное плохой компилятор. Без явного преобразования очевидно, что безопаснее. Цитата(ViKo @ Jan 7 2014, 02:35)  Нужно поправить - брать адрес структуры. Какая разница в данном случае, с амперсандом или без? В случае когда голый идентификатор структуры без указания поля. Однозначнее, конечно, было бы с амперсандом, но на данный момент в Си оба варианта вроде бы одинаковые. Цитата(megajohn @ Jan 7 2014, 02:18)  если оно будет на стеке, то по моменту запуска самой задачи естветсвено всё уплывет. Квалификатор const не запретит передачу локальной переменной. Не встать на грабли - забота программиста. const в параметре "проявит себя" только внутри тела функции, когда этот указатель без явного преобразования будет передан параметром или присвоен другому типизированному указателю на константу. Цитата(megajohn @ Jan 7 2014, 02:18)  то есть так нельзя Suart_init mb_cfg = { 0, 9600 }; task_start( mb_task, ..., (void*)mb_cfg );
а так можно const Suart_init mb_cfg = { 0, 9600 }; task_start( mb_task, ..., (void*)mb_cfg ); Второй вариант тоже будет на стеке. Просто менять его значения нельзя будет.
Сообщение отредактировал GetSmart - Jan 7 2014, 02:22
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 7 2014, 08:50
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(GetSmart @ Jan 7 2014, 02:38)  Какая разница в данном случае, с амперсандом или без? В случае когда голый идентификатор структуры без указания поля. Однозначнее, конечно, было бы с амперсандом, но на данный момент в Си оба варианта вроде бы одинаковые. Возможно, в других языках варианты одинаковые. Но не в С. В C можно структуру передавать в функцию, именно, по значению, а не по ссылке. Т.е., имя структуры не есть ее адрес. В отличие от массива.
|
|
|
|
|
Jan 10 2014, 11:45
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(ViKo @ Jan 7 2014, 14:50)  В C можно структуру передавать в функцию, именно, по значению, а не по ссылке. Т.е., имя структуры не есть ее адрес. В отличие от массива. Ну и как это связано с явным преобразованием идентификатора структуры? Разве при этом недостаточно информации о том, что "заказчик" желает взять именно её адрес? Более интересна ситуация, которую я нашёл у себя в исходниках, применения явного преобразования адреса к локальной (чаще регистровой) переменной. Вроде: Код void foo(float val) { u32 val32 = *(u32 *)&val;
u32 res32 = 0x80000000; if (val32 != 0) res32 = (((val32 & 0x007FFFFF) >> 1) | 0x00400000) | ...; .... } Вот здесь (во второй строке), спрашивается, компилятору хватит информации не облажаться.
Сообщение отредактировал GetSmart - Jan 10 2014, 13:27
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 10 2014, 11:59
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(GetSmart @ Jan 10 2014, 14:45)  Ну и как это связано с явным преобразованием идентификатора структуры? Разве при этом недостаточно информации о том, что "заказчик" желает взять именно её адрес? Никак. С тем вопросом уже разобрались. Цитата Более интересна ситуация, которую я нашёл у себя в исходниках, применения явного преобразования адреса к локальной (чаще регистровой) переменной. Как это - адрес у регистровой переменной? Ну, для PIC-ов, где все переменные - регистры, можно понять. А вы о каком процессоре говорите?
|
|
|
|
Сообщений в этой теме
ViKo void const *argument Jan 6 2014, 19:06 megajohn ну к примеру у вас на контроллере два UART
и в од... Jan 6 2014, 19:57 ViKo Цитата(megajohn @ Jan 6 2014, 22:57) то е... Jan 6 2014, 20:35 kosyak© Вот зачем оно конст...? Jan 6 2014, 20:14 megajohn если оно будет на стеке, то по моменту запуска сам... Jan 6 2014, 20:18 kosyak© тогда уж
task_start( mb_task, ..., (void const*)... Jan 6 2014, 20:40  GetSmart Цитата(ViKo @ Jan 7 2014, 14:50) Возможно... Jan 7 2014, 10:08   ViKo Цитата(GetSmart @ Jan 7 2014, 13:08) Чем ... Jan 7 2014, 10:18    GetSmart Цитата(ViKo @ Jan 7 2014, 16:18) Led9_id ... Jan 7 2014, 10:38     ViKo Цитата(GetSmart @ Jan 7 2014, 13:29) Пред... Jan 7 2014, 10:42    GetSmart Цитата(ViKo @ Jan 7 2014, 16:18) Тем, что... Jan 8 2014, 06:38     ViKo Цитата(GetSmart @ Jan 8 2014, 09:38) А (v... Jan 8 2014, 09:21      Сергей Борщ Цитата(ViKo @ Jan 8 2014, 11:21) Мое мнен... Jan 8 2014, 10:51      GetSmart Цитата(ViKo @ Jan 8 2014, 15:21) Проверьт... Jan 8 2014, 10:56       ViKo Цитата(GetSmart @ Jan 8 2014, 13:56) Кейл... Jan 8 2014, 11:10        Сергей Борщ Цитата(ViKo @ Jan 8 2014, 13:10) На uin... Jan 8 2014, 18:11         ViKo Цитата(Сергей Борщ @ Jan 8 2014, 21:11) Е... Jan 8 2014, 18:30          Сергей Борщ Цитата(ViKo @ Jan 8 2014, 20:30) Почему ж... Jan 9 2014, 01:29    GetSmart Цитата(ViKo @ Jan 10 2014, 17:59) Как это... Jan 10 2014, 12:07     ViKo Цитата(GetSmart @ Jan 10 2014, 15:07) Ещё... Jan 10 2014, 14:13 megajohn Цитата(GetSmart @ Jan 7 2014, 03:38) Квал... Jan 7 2014, 10:20 Tarbal В процессорах с Гарвардской архитектурой AVR, PIC,... Jan 9 2014, 02:47 Сергей Борщ Цитата(Tarbal @ Jan 9 2014, 04:47) В проц... Jan 9 2014, 07:28  Herz Цитата(Сергей Борщ @ Jan 9 2014, 09:28) А... Jan 9 2014, 08:11   Сергей Борщ Цитата(Herz @ Jan 9 2014, 10:11) А каким ... Jan 9 2014, 12:19    ViKo Цитата(Сергей Борщ @ Jan 9 2014, 15:19) Я... Jan 9 2014, 12:24     Сергей Борщ Цитата(ViKo @ Jan 9 2014, 14:24) Да, с ло... Jan 9 2014, 12:44  ViKo Цитата(Сергей Борщ @ Jan 9 2014, 10:28) А... Jan 9 2014, 08:16  Tarbal Цитата(Сергей Борщ @ Jan 9 2014, 10:28) Н... Jan 9 2014, 18:55 GetSmart Цитата(Tarbal @ Jan 9 2014, 08:47) В проц... Jan 10 2014, 19:22 andrewlekar При чём тут static вообще? На ARMах const в опреде... Jan 9 2014, 10:17 XVR Использование ключевых слов static и/или const для... Jan 9 2014, 10:20 ViKo Цитата(XVR @ Jan 9 2014, 13:20) Поэтом, п... Jan 9 2014, 10:36 andrewlekar Цитатадля каких именно компиляторов
Ни для каких. ... Jan 9 2014, 10:27 andrewlekar Что, вашему компилятору не хватает ума разместить ... Jan 9 2014, 10:40 andrewlekar Что вы этим гениальным кодом хотите проверить? В c... Jan 10 2014, 05:29 Tarbal Цитата(andrewlekar @ Jan 10 2014, 08:29) ... Jan 10 2014, 14:22 редактор Цитатато надо было указать квалификатор __flash.
О... Jan 10 2014, 08:04 andrew_b Цитата(редактор @ Jan 10 2014, 12:04) con... Jan 10 2014, 08:54 ViKo Удостоверился в Кейл для глобальных переменных:
- ... Jan 10 2014, 09:45 Сергей Борщ Цитата(ViKo @ Jan 10 2014, 11:45) Удостов... Jan 10 2014, 11:05 andrewlekar ЦитатаУ кого есть IAR AVR?
ЦитатаДля процессора с ... Jan 10 2014, 17:30 Tarbal Цитата(andrewlekar @ Jan 10 2014, 21:30) ... Jan 10 2014, 22:35 andrewlekar ЦитатаНичего не понял. Может попробуете еще раз вы... Jan 11 2014, 06:32 Tarbal Цитата(andrewlekar @ Jan 11 2014, 10:32) ... Jan 11 2014, 18:22  Сергей Борщ Цитата(Tarbal @ Jan 11 2014, 20:22) Я вам... Jan 11 2014, 19:33   Tarbal Цитата(Сергей Борщ @ Jan 11 2014, 22:33) ... Jan 13 2014, 12:28 Tarbal Вот документ.
На странице 5 есть информация о разм... Jan 14 2014, 13:10 demiurg_spb Цитата(Tarbal @ Jan 14 2014, 17:10) Вот д... Jan 14 2014, 15:42  Tarbal Цитата(demiurg_spb @ Jan 14 2014, 19:42) ... Jan 14 2014, 16:09   demiurg_spb Цитата(Tarbal @ Jan 14 2014, 20:09) Прост... Jan 14 2014, 16:34    Tarbal Цитата(demiurg_spb @ Jan 14 2014, 20:34) ... Jan 14 2014, 18:46     Сергей Борщ Цитата(Tarbal @ Jan 14 2014, 20:46) О ста... Jan 15 2014, 07:37 Сергей Борщ Цитата(Tarbal @ Jan 14 2014, 15:10) Вот д... Jan 14 2014, 18:09 andrewlekar Ну вот я собрал ваш код при помощи IAR AVR 5.3. Во... Jan 15 2014, 04:53 Tarbal Цитата(andrewlekar @ Jan 15 2014, 08:53) ... Jan 15 2014, 13:13  Сергей Борщ Цитата(Tarbal @ Jan 15 2014, 15:13) И как... Jan 15 2014, 15:23 dxp Очень плотно использовал IAR для AVR в конце девян... Jan 15 2014, 13:49 Tarbal Цитата(dxp @ Jan 15 2014, 17:49) Очень пл... Jan 16 2014, 23:40
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|