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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Вычисляемая константа в PCW, как?
MrYuran
сообщение Feb 26 2009, 10:01
Сообщение #16


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(demiurg_spb @ Feb 26 2009, 12:53) *
Если константа объявлена как статик, то компилятор понимает что она локальна в модуле или в процедуре.

А если не локальна?
Типа SYSTEM_TICKS_IN_1S ?
Тогда всё-таки лучше дефайн.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2009, 10:05
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Feb 26 2009, 12:01) *
А если не локальна?
Тогда она объявляется в заголовочном файле и будет локальной для любого модуля, в который включен этот заголовочный файл. Эффект практически тот же, что и с #define, но компилятор может проводить проверки типов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 26 2009, 10:13
Сообщение #18


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Feb 26 2009, 13:05) *
Тогда она объявляется в заголовочном файле и будет локальной для любого модуля, в который включен этот заголовочный файл.

Не совсем понял, вернее, совсем не понял.
Он же тогда напишет, что переменная non-static и соответственно её таковой считать не будет (или будет?)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2009, 12:18
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Feb 26 2009, 12:13) *
Он же тогда напишет, что переменная non-static и соответственно её таковой считать не будет (или будет?)
Кто напишет? Вы ее явно объявили static, в заголовочном файле. Она глобальная, значит static ограничивает ее область видимости текущей единицей компиляции.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 26 2009, 13:05
Сообщение #20


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Сергей прав. Я просто забыл ещё упомянуть о возможности включения static const в заголовочные файлы.
Это полезно для замены define на константы.
Но тут может "таиться опасность" если Вы так поступите с константным массивом большого размера или структурой и т.п.
то размер программы может резко скакануть. Т.к. в каждом модуле будет по копии этого объекта (если он используется в каждом модуле).
Вот тут как раз и нужен просто const + extern const в заголовочном файле.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Eddy71
сообщение Feb 26 2009, 14:11
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879



Попробовал разные варианты компиляции, похоже PCW не делает различий между static const и просто const. Поглядел в результаты компиляции - и так и так правильно. В заголовочный файл вытаскивать вычисляемую константу (пока) смысла не вижу. Когда её значение подбирается (на этапе "вылизывания" процедур) её удобно держать перед глазами (и править, если что-то не так). Я прикрутил компилятор к любимому MPLABу, а он после компиляции открывает заново main.c и после перешивки контроллера и "мучании" платы если надо подкорректировать значение константы это удобнее сделать тут же. Тем более константы (пока их в программе 4 у меня глобальные и используются в нескольких процедурах) расположены в начале файла и их тут-же можно подправить не переключаясь между файлами.


--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
Go to the top of the page
 
+Quote Post
Eddy71
сообщение Feb 26 2009, 15:34
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879



По ходу обучения писанию на Си возник глупейший вопрос:
...
Извиняюсь, вопрос снялся. Таки вспомнил.. smile.gif

Сообщение отредактировал Eddy71 - Feb 26 2009, 16:23


--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
Go to the top of the page
 
+Quote Post

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

 


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


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