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

 
 
> Объявления, Как принято делать, и кто как реально делает.
SasaVitebsk
сообщение Oct 14 2009, 18:34
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Раньше у меня не было таких проблем. Обычно создавал группу файлов. Как правило все файлы были достаточно обособленными и я их объединял на этапе линковки. Если были групповые общие объявления, то я их делал в main, а в других объявлял как extern.

Проблема возникла в одном проекте. Он получил развитие и теперь существует в нескольких реинкарнациях с различными модификациями и процами. Тем не менее там есть очень крупные общие блоки. Столкнувшись, с проблемой поддержки - пришёл к необходимости общую часть исходников выделить в отдельные файлы/процедуры. А иначе, при внесении изменений приходилось править все проекты. Выделил и переписал, с учётом унификации.

А теперь вопрос.
Эти блоки используют общие глобальные переменные. Как их правильно объявить, чтобы было удобнее использовать и поддерживать, а также было меньше разной писанины?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Flexz
сообщение Oct 15 2009, 08:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Цитата
Насчет приведения к (void*) - это путь для всевозможных трудноуловимых ошибок, тк рано или поздно будет передан не тот объект, который ожидаем

Это элементарно контролируется сигнатурой и/или sizeof.

И вообще меня неправильно поняли - я не предлагаю тащить в С концепции С++, а лишь провожу аналогии - это все там и так есть, просто приглядитесь повнимательнее.
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Oct 15 2009, 08:42
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(Flexz @ Oct 15 2009, 11:12) *
Это элементарно контролируется сигнатурой и/или sizeof.

И вообще меня неправильно поняли - я не предлагаю тащить в С концепции С++, а лишь провожу аналогии - это все там и так есть, просто приглядитесь повнимательнее.


Сигнатура - проверка run-tmie + занимает ресурсы.
А про sizeof - не понял как его можно применять для котнтроля типа того, что нам передали по void указателю unsure.gif

Так что не убедили sad.gif
Нет в Си альтернативы С++ому контролю типов.

PS Откомпилируйте следующий пример Си компилятором и С++ компилятором. Почувствуйте разницу в строгости комиплятора

Код
#include <stdio.h>

///@brief Overflow in initialization
char acBuf_[3] = "12345678";            // !!! Error in C++, Warinig in C

///@brief Function which change argument's value
void TestFun(int* piNum_)
{
(*piNum_) = 15;
}

////////////////////////////////////////
int main()
{
  volatile const int NUM = 1;
  TestFun(&NUM);                        // !!! Error in C++, Warinig in C

  printf("Num = %i\n", NUM);
  return 0;
}
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 15 2009, 15:42
Сообщение #4


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

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



Цитата(Dima_G @ Oct 15 2009, 12:42) *
Код
volatile const int NUM = 1;
Поделитесь пожалуйста сакральными знаниями, когда const может быть ещё и volatile?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 16 2009, 03:08
Сообщение #5


Adept
******

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



Цитата(demiurg_spb @ Oct 15 2009, 22:42) *
Поделитесь пожалуйста сакральными знаниями, когда const может быть ещё и volatile?

Что вас так удивляет? Представьте себе регистр только для чтения - регистр специальных функций (SFR) процессора: например, регистр данных приемника UART'а. Чтение из него сбрасывает флаг прерывания от приемника. Т.е. чтение надо делать обязательно. Писать нельзя. Вот вам и const volatile. Обычная вещь.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 16 2009, 20:25
Сообщение #6


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

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



Цитата(dxp @ Oct 16 2009, 07:08) *
Что вас так удивляет?
Меня удивляет, что в приведённом примере был не регистр...
Цитата
Представьте себе регистр только для чтения - регистр специальных функций (SFR) процессора...
Да, за этот наглядный пример спасибо. А то меня как-то замкнуло на том, что const это константа и всё (т.е. её нельзя изменить и сама собой она не поменяется, а volatile тут сильно всё меняет).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Объявления   Oct 14 2009, 18:34
- - rezident   Может стоит объединить переменные в глобальную стр...   Oct 14 2009, 19:13
|- - SasaVitebsk   Цитата(rezident @ Oct 14 2009, 22:13) Мож...   Oct 14 2009, 19:38
|- - kurtis   Цитата(SasaVitebsk @ Oct 14 2009, 22:38) ...   Oct 14 2009, 21:32
|- - SasaVitebsk   Цитата(kurtis @ Oct 15 2009, 00:32) Попро...   Oct 14 2009, 22:24
|- - zltigo   Цитата(kurtis @ Oct 15 2009, 00:32) Конст...   Oct 14 2009, 22:41
|- - dxp   Цитата(kurtis @ Oct 15 2009, 04:32) Попро...   Oct 15 2009, 04:18
- - sigmaN   Не знаю правда ли, но я недавно прочел такую вещь:...   Oct 14 2009, 19:25
- - sigmaN   Ну тут, ИМХО, кроме Вас никто не решит проблему. Я...   Oct 14 2009, 19:43
- - Faradey   как вариант, объедините специфические "переме...   Oct 14 2009, 20:03
- - Dima_G   Ранее тоже столкнулся с тем, что большая часть код...   Oct 15 2009, 03:09
- - Flexz   Вобщем-то, все что вы предлагаете можно и на С реа...   Oct 15 2009, 07:07
|- - Dima_G   Цитата(Flexz @ Oct 15 2009, 10:07) ИМХО в...   Oct 15 2009, 07:19
|- - dxp   Цитата(Flexz @ Oct 15 2009, 14:07) Вобщем...   Oct 15 2009, 07:30
|- - zltigo   Цитата(Dima_G @ Oct 15 2009, 11:42) Отком...   Oct 15 2009, 12:22
|- - Dima_G   Цитата(demiurg_spb @ Oct 17 2009, 00:25) ...   Oct 17 2009, 08:07
- - Flexz   По теме C vs C++ извините, но.. даже отвечать не х...   Oct 15 2009, 08:55
- - SasaVitebsk   Если бы изначально всё продумывалось, то такого бы...   Oct 15 2009, 11:53
- - _Pasha   Цитата(SasaVitebsk @ Oct 14 2009, 21:34) ...   Oct 15 2009, 15:54
- - sigmaN   Все на столько привыкли к препроцессору, что видим...   Oct 16 2009, 06:23
|- - Dog Pawlowa   Структуры данных и передача указателей на структур...   Oct 16 2009, 19:46
- - sigmaN   Я вот тут призадумался... А как бы нам так объявит...   Oct 17 2009, 12:48
|- - _Pasha   Цитата(sigmaN @ Oct 17 2009, 15:48) Но ка...   Oct 17 2009, 12:56
- - Rst7   ЦитатаЯ вот тут призадумался... А как бы нам так о...   Oct 17 2009, 13:24
- - sigmaN   Цитатаю smile.gif Да все так же: Ну я имел ввиду б...   Oct 17 2009, 15:58
- - Rst7   ЦитатаНу я имел ввиду без использования препроцесс...   Oct 17 2009, 17:19
- - sigmaN   ЦитатаАх простите, я не понял.Ну это не удивительн...   Oct 17 2009, 21:09


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:28
Рейтинг@Mail.ru


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