реклама на сайте
подробности

 
 
> модификатор const. Как правильно использовать в Си
inventor
сообщение Dec 22 2017, 15:39
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



где компилятор должен расположить "переменные"
такого вида:

CODE
// Описано глобально
const u8 x_pos[][8] = {
{50, 60},
{55, 62, 69, 76, 83, 90, 97, 104},
{76},
{76},
};


то же самое, описано внутри функции


и то же самое внутри функции
CODE

static const u8 x_pos[][8] = {
{50, 60},
{55, 62, 69, 76, 83, 90, 97, 104},
{76},
{76},
};



у меня есть неизменяемый массив большого размера
и при входе в функцию
этот констатный масив создается в стеке.
если его не определить как static
правильно ли это поведение или нет?


в первом варианте в глобальной константе
этот массив помещен в память Flash. Правильное поведение.

Во втором варианте в стек - неправильное
в третьем варианте во Flash память.





Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение Jan 29 2018, 21:07
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



А вот это я расшифровать пока не могу blink.gif

Озвучу мысли, но я не уверен что это правильно
func это массив указателей на функцию без параметров, которая возвращает указатель на фукнцию без параметров, которая возвращает char


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jan 29 2018, 21:14
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(sigmaN @ Jan 30 2018, 00:07) *
А вот это я расшифровать пока не могу blink.gif

Озвучу мысли, но я не уверен что это правильно
func это массив указателей на функцию без параметров, которая возвращает указатель на фукнцию без параметров, которая возвращает char

Ну, я Вас понимаю =)
Подобные "сюрпризы" ни раз приходилось наблюдать в индусских говнопрограммах драйверах для процессоров различных платформ.
Пример надуманный, и у вышеупомянутых коллек по ремеслу индусских товарищей было что-то чуть-чуть попроще, но лишь чуть-чуть laughing.gif
P.S. func - это функция, не принимающая аргументов и возвращающая указатель на массив указателей на функции, которые возвращают char и не принимают параметров.

Кстати, кто там хотел проверять кандидатов на знание языка Си - да элементарно предложите написать окружение для безошибочного компилирования следующей белиберды
Код
for(;P("\\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

Этой строке лет 20 уже - как гласит легенда - "первоапрельская шутка для UNIX-программистов" раньше была...
Это покажет уровень понимания (!) языка в принципе. Я знаю, что знание языка отнюдь не всегда самое важное, однако эмбеддерам мое мнение нахрен никому не нужно считаю нужно уметь "думать" на языке, на котором пишешь.

Сообщение отредактировал Arlleex - Jan 29 2018, 21:21
Go to the top of the page
 
+Quote Post
DASM
сообщение Jan 29 2018, 21:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Arlleex @ Jan 30 2018, 00:14) *
Ну, я Вас понимаю =)
Подобные "сюрпризы" ни раз приходилось наблюдать в индусских говнопрограммах драйверах для процессоров различных платформ.
Пример надуманный, и у вышеупомянутых коллек по ремеслу индусских товарищей было что-то чуть-чуть попроще, но лишь чуть-чуть laughing.gif
P.S. func - это функция, не принимающая аргументов и возвращающая указатель на массив указателей на функции, которые возвращают char и не принимают параметров.

Ну блин, я к Вам в кино в следущий раз подсяду и буду шептать "а убийца то - дворник. " Только я тоже пока не могу корректно компилящийся код под такую конструкцию написать, даже после такого ответа. Возникает идея - давать на собеседовании такие вот вопросы, и, если решил - не брать ни в коем случае, а то весь код в таком ключе и будет написан. Шарады и ребусы это конечно круто, но не в рабочем коде. А вообще это все ерунда я считаю. Пусть не знает вообще ни одного языка, но нарисует мне удобные интерфейсы - это супер. Я вот уже месяц торможу над проектом, при этом основной инструмент - планшет с пером, рисую взаимосвязи и интерфейсы, вот там реально мало чую у меня опыта. А эти шарады нафик не сдались
"понимания (!) языка в принципе." - ничего кроме знания формальных правил это не покажет. Давайте ужо кодера от программиста отличать что-ли
Задумался "нужно уметь "думать" на языке" - а чтобы думать всегда надо думать словами ? Двуязычные тут есть? На каком языке думаете обычно? Я про реальные языки, типа русского там или украинского, английского.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jan 29 2018, 21:27
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(DASM @ Jan 30 2018, 00:20) *
Ну блин, я к Вам в кино в следущий раз подсяду и буду шептать "а убийца то - дворник. " Только я тоже пока не могу корректно компилящийся код под такую конструкцию написать, даже после такого ответа. Возникает идея - давать на собеседовании такие вот вопросы, и, если решил - не брать ни в коем случае, а то весь код в таком ключе и будет написан. Шарады и ребусы это конечно круто, но не в рабочем коде. А вообще это все ерунда я считаю. Пусть не знает вообще ни одного языка, но нарисует мне удобные интерфейсы - это супер. Я вот уже месяц торможу над проектом, при этом основной инструмент - планшет с пером, рисую взаимосвязи и интерфейсы, вот там реально мало чую у меня опыта. А эти шарады нафик не сдались

Вам лично могу придумать полдесятка витиеватых примеров для решения rolleyes.gif

Согласен, запутанные конструкции реально использовать трудно. Но менее сложные, такие как массивы указателей на функции, использовать приходилось, да и решение выглядело вполне изящно.

Многие "фишки" C++ как раз раскрываются вот такими интересными конструкциями... Тот же механизм виртуальных функций...
Go to the top of the page
 
+Quote Post
DASM
сообщение Jan 29 2018, 21:34
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Arlleex @ Jan 30 2018, 00:27) *
Вам лично могу придумать полдесятка витиеватых примеров для решения rolleyes.gif

Согласен, запутанные конструкции реально использовать трудно. Но менее сложные, такие как массивы указателей на функции, использовать приходилось, да и решение выглядело вполне изящно.

Многие "фишки" C++ как раз раскрываются вот такими интересными конструкциями... Тот же механизм виртуальных функций...

Вот после такой хрени таки да, auto как глоток воздуха становится. Ловлю себя на мысли, что то , чем не пользуешься - забывается мгновенно. Я синтаксис того что Вы написали однозначно не прочел бы ни с первого ни второго раза. В реальной работе крайне редко использую даже простой указатель на функцию. Если нужен - снова гуглю - где там скобочки и звездочки правильно расставить надо. Честно говоря такая моя "безграмотность" - не мешает. Проектирование программы, повторюсь, считаю куда более сложной задачей, чем собственно претворение готового проекта в код
"использовать приходилось, да и решение выглядело вполне изящно" - да, согласен. Но я такие конструкции с гуглом пишу а не по памяти, обычно их пару раз в моих небольших проектах то и нужно всего использовать.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jan 29 2018, 21:57
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(DASM @ Jan 30 2018, 00:34) *
Вот после такой хрени таки да, auto как глоток воздуха становится. Ловлю себя на мысли, что то , чем не пользуешься - забывается мгновенно. Я синтаксис того что Вы написали однозначно не прочел бы ни с первого ни второго раза...
Честно говоря такая моя "безграмотность" - не мешает. Проектирование программы, повторюсь, считаю куда более сложной задачей, чем собственно претворение готового проекта в код...

Насчет проектирования программы с Вами полностью согласен.
Я просто люблю разные "трюки" в Си. Но стараюсь их избегать в реальном применении, потому как понимаю, что мой код, возможно, кому-то еще и поддерживать.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- inventor   модификатор const. Как правильно использовать в Си   Dec 22 2017, 15:39
- - Kabdim   rtfm, очень нужно почитать умную книжку по языку н...   Dec 22 2017, 16:01
|- - inventor   Цитата(Kabdim @ Dec 22 2017, 19:01) Вмест...   Dec 22 2017, 16:21
|- - demiurg_spb   Цитата(inventor @ Dec 22 2017, 19:21) мож...   Dec 22 2017, 16:29
|- - Kabdim   Цитата(inventor @ Dec 22 2017, 19:21) мож...   Dec 22 2017, 17:00
|- - demiurg_spb   Цитата(Kabdim @ Dec 22 2017, 20:00) Согл...   Dec 22 2017, 17:07
|- - Kabdim   Цитата(demiurg_spb @ Dec 22 2017, 20:07) ...   Dec 23 2017, 19:41
||- - DASM   Цитата(Kabdim @ Dec 23 2017, 22:41) Верно...   Dec 23 2017, 20:24
|- - juvf   Цитата(demiurg_spb @ Dec 22 2017, 22:07) ...   Dec 24 2017, 17:36
|- - DASM   Цитата(juvf @ Dec 24 2017, 20:36) Что так...   Dec 24 2017, 19:04
||- - razrab83   Цитата(DASM @ Dec 24 2017, 20:04) const н...   Dec 25 2017, 03:10
|||- - Quasar   Цитата(razrab83 @ Dec 25 2017, 06:10) А п...   Dec 30 2017, 09:04
|||- - razrab83   Цитата(Quasar @ Dec 30 2017, 09:04) Локал...   Jan 3 2018, 10:26
|||- - Quasar   Цитата(razrab83 @ Jan 3 2018, 13:26) Лока...   Jan 3 2018, 22:06
||- - juvf   Цитата(DASM @ Dec 25 2017, 00:04) const н...   Dec 25 2017, 03:34
|- - demiurg_spb   Цитата(juvf @ Dec 24 2017, 20:36) Что так...   Dec 25 2017, 14:08
|- - juvf   ЦитатаСогласно стандарту языка Си константные данн...   Dec 25 2017, 16:28
|- - demiurg_spb   С вами бесполезно разговаривать - это Вы к AVR и f...   Dec 26 2017, 12:03
|- - juvf   Цитата(demiurg_spb @ Dec 26 2017, 17:03) ...   Dec 27 2017, 02:57
|- - demiurg_spb   Цитата(juvf @ Dec 27 2017, 05:57) Пусть g...   Dec 27 2017, 10:12
|- - juvf   Цитата(demiurg_spb @ Dec 27 2017, 15:12) ...   Dec 27 2017, 10:49
|- - demiurg_spb   Цитата(juvf @ Dec 27 2017, 13:49) Изменил...   Dec 27 2017, 10:53
- - Raven   А разве не должен компилятор помещать глобальные и...   Dec 22 2017, 16:53
|- - demiurg_spb   Цитата(Raven @ Dec 22 2017, 19:53) Нет не...   Dec 22 2017, 16:56
|- - k155la3   Цитата(Raven @ Dec 22 2017, 19:53) А разв...   Dec 23 2017, 12:07
- - inventor   то есть для того что бы константные данные легли в...   Dec 23 2017, 18:03
- - DASM   еще как указание. статик в теле фции размещается н...   Dec 25 2017, 07:31
|- - juvf   Цитата(DASM @ Dec 25 2017, 12:28) еще как...   Dec 25 2017, 07:57
|- - Kabdim   Цитата(juvf @ Dec 25 2017, 10:57) его раз...   Dec 25 2017, 08:02
|- - DASM   Цитата(juvf @ Dec 25 2017, 10:57) пф.... ...   Dec 25 2017, 08:15
|- - juvf   Цитата(DASM @ Dec 25 2017, 13:15) вытекае...   Dec 25 2017, 08:17
- - inventor   наверное в следующих стандартах Си это можно было...   Dec 25 2017, 08:36
- - ViKo   Все, что описал топикстартер в начале темы, верно....   Dec 25 2017, 09:46
- - Сергей Борщ   Вообще-то в GCC в режиме С (без плюсов) уже года д...   Dec 25 2017, 14:48
|- - demiurg_spb   Цитата(Сергей Борщ @ Dec 25 2017, 17:48) ...   Dec 25 2017, 14:53
|- - inventor   Цитата(Сергей Борщ @ Dec 25 2017, 17:48) ...   Dec 25 2017, 16:12
- - Kabdim   Демиург, вы переоцниваете значимость техникал репо...   Dec 27 2017, 13:23
|- - demiurg_spb   Время покажет. Факт есть факт - в gcc уже реализов...   Dec 27 2017, 13:24
- - inventor   мдя задал простой вопрос и как всегда разгорелся с...   Dec 27 2017, 14:34
- - pnp_mechanic   Вставлю и я свои 5 коп. Inventor, всегда можно пос...   Dec 27 2017, 15:14
- - aiwa   Цитата(inventor @ Dec 25 2017, 10:36) ......   Dec 27 2017, 16:08
- - sigmaN   Про применение volatile const для read only регист...   Jan 1 2018, 18:44
|- - Quasar   Цитата(sigmaN @ Jan 1 2018, 21:44) Про пр...   Jan 2 2018, 08:55
|- - DASM   Цитата(Quasar @ Jan 2 2018, 11:55) Я в св...   Jan 25 2018, 17:09
|- - esaulenka   Цитата(DASM @ Jan 25 2018, 20:09) Еще бы...   Jan 27 2018, 09:35
||- - DASM   Цитата(esaulenka @ Jan 27 2018, 12:35) Пр...   Jan 27 2018, 11:25
|- - Quasar   ЦитатаПривидите плиз пример когда volatile const н...   Jan 28 2018, 09:14
|- - sidy   Цитата(Quasar @ Jan 28 2018, 12:14) В C++...   Jan 29 2018, 06:52
- - sigmaN   Кодint f(int a ) { const int c = 5; return...   Jan 3 2018, 10:53
- - razrab83   ЦитатаПеременная c вообще не займет никакой памяти...   Jan 3 2018, 13:47
- - sigmaN   Ну так мы же про размещение данных говорим вроде к...   Jan 3 2018, 18:26
|- - razrab83   Цитата(sigmaN @ Jan 3 2018, 18:26) Тоже с...   Jan 4 2018, 08:50
|- - Quasar   Цитата(razrab83 @ Jan 4 2018, 11:50) 2Qua...   Jan 4 2018, 21:57
- - inventor   читаю pdf на IAR такой забавный пример с константа...   Jan 25 2018, 11:54
- - sigmaN   Правильно, потому что это __ramfunc и никто не хоч...   Jan 25 2018, 14:36
|- - demiurg_spb   Цитата(sigmaN @ Jan 25 2018, 17:36) Если ...   Jan 25 2018, 15:26
- - krux   IAR сделан не только под миниатюрные микроконтролл...   Jan 25 2018, 16:40
|- - demiurg_spb   Цитата(krux @ Jan 25 2018, 19:40) приведе...   Jan 26 2018, 11:12
- - sigmaN   ЦитатаПравильно, потому что это __ramfunc и никто ...   Jan 25 2018, 20:20
- - Сергей Борщ   Не знаю, что он нынче делает в C, а в плюсах новый...   Jan 27 2018, 20:24
|- - DASM   Цитата(Сергей Борщ @ Jan 27 2018, 23:24) ...   Jan 27 2018, 20:38
- - Arlleex   Ну, чтобы совсем подлить масла в огонь, можно вбро...   Jan 28 2018, 17:09
|- - DASM   Цитата(Arlleex @ Jan 28 2018, 20:09) Ну, ...   Jan 28 2018, 17:44
- - sigmaN   Кодint arr[2] = {0, 1}; int i; int pi; in...   Jan 28 2018, 19:50
|- - gerber   Цитата(sigmaN @ Jan 28 2018, 22:50) Брэйк...   Jan 28 2018, 20:03
||- - DASM   Цитата(gerber @ Jan 28 2018, 23:03) Не ср...   Jan 28 2018, 20:40
|- - alx.bilous   Цитата(sigmaN @ Jan 28 2018, 22:50) На мн...   Jan 28 2018, 21:31
|- - Kabdim   Цитата(sigmaN @ Jan 28 2018, 22:50) Кто о...   Jan 29 2018, 08:19
|- - DASM   Цитата(Kabdim @ Jan 29 2018, 11:19) Даже ...   Jan 29 2018, 15:04
|- - Quasar   Цитата(DASM @ Jan 29 2018, 18:04) +++...   Jan 30 2018, 05:16
- - sigmaN   Я думаю стоит сконцентрироваться на работе с масси...   Jan 28 2018, 20:51
|- - Quasar   Цитата(sigmaN @ Jan 28 2018, 23:51) Ответ...   Jan 28 2018, 21:15
- - DASM   Ну имя массива это не lvalue , нельзя записать ...   Jan 28 2018, 21:34
- - alx.bilous   Мне и правда нужно было упоминать что строка девят...   Jan 28 2018, 21:38
- - Arlleex   ЦитатаНа много интереснее попросить привести приме...   Jan 29 2018, 05:42
- - _Sam_   Цитатав первом варианте в глобальной константе это...   Jan 29 2018, 07:45
|- - juvf   Цитата(_Sam_ @ Jan 29 2018, 12:45) Второй...   Jan 29 2018, 09:14
|- - ViKo   Цитата(juvf @ Jan 29 2018, 12:14) Он в лю...   Jan 29 2018, 12:21
|- - juvf   Цитата(ViKo @ Jan 29 2018, 17:21) Во флэш...   Jan 29 2018, 16:01
- - sigmaN   Кодint (*ptr)[2]; Скомпилится? ptr...   Jan 29 2018, 15:46
|- - DASM   Цитата(sigmaN @ Jan 29 2018, 18:46) Кодin...   Jan 29 2018, 15:55
|- - Arlleex   Цитата(sigmaN @ Jan 29 2018, 18:46) Кодin...   Jan 29 2018, 19:35
- - DASM   delete   Jan 29 2018, 16:37
|- - dxp   Цитата(Arlleex @ Jan 30 2018, 04:14) P.S....   Jan 30 2018, 05:14
||- - Arlleex   Цитата(dxp @ Jan 30 2018, 08:14) func - н...   Jan 30 2018, 06:37
||- - DASM   Цитата(Arlleex @ Jan 30 2018, 09:37) логи...   Jan 30 2018, 08:00
||- - dxp   Цитата(Arlleex @ Jan 30 2018, 13:37) Вы н...   Jan 30 2018, 09:08
||- - Arlleex   Цитата(dxp @ Jan 30 2018, 12:08) char (*(...   Jan 30 2018, 10:38
|- - Quasar   Цитата(Arlleex @ Jan 30 2018, 00:14) P.S....   Jan 30 2018, 09:11
- - sigmaN   Цитатаfunc - это функция, не принимающая аргументо...   Jan 29 2018, 21:31
- - DASM   "кому-то еще и поддерживать." и 99 % это...   Jan 29 2018, 22:09
- - ViKo   Мудреные конструкции наподобие вышеприведенных раз...   Jan 30 2018, 05:07
- - DASM   "поплачИтесь" ,- непременно Цитата(dxp ...   Jan 30 2018, 06:04
- - Quasar   Цитата(DASM @ Jan 30 2018, 09:04) "п...   Jan 30 2018, 07:49
2 страниц V   1 2 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 03:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016