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

|
Раньше у меня не было таких проблем. Обычно создавал группу файлов. Как правило все файлы были достаточно обособленными и я их объединял на этапе линковки. Если были групповые общие объявления, то я их делал в main, а в других объявлял как extern.
Проблема возникла в одном проекте. Он получил развитие и теперь существует в нескольких реинкарнациях с различными модификациями и процами. Тем не менее там есть очень крупные общие блоки. Столкнувшись, с проблемой поддержки - пришёл к необходимости общую часть исходников выделить в отдельные файлы/процедуры. А иначе, при внесении изменений приходилось править все проекты. Выделил и переписал, с учётом унификации.
А теперь вопрос. Эти блоки используют общие глобальные переменные. Как их правильно объявить, чтобы было удобнее использовать и поддерживать, а также было меньше разной писанины?
|
|
|
|
|
 |
Ответов
|
Oct 15 2009, 08:12
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Цитата Насчет приведения к (void*) - это путь для всевозможных трудноуловимых ошибок, тк рано или поздно будет передан не тот объект, который ожидаем Это элементарно контролируется сигнатурой и/или sizeof. И вообще меня неправильно поняли - я не предлагаю тащить в С концепции С++, а лишь провожу аналогии - это все там и так есть, просто приглядитесь повнимательнее.
|
|
|
|
|
Oct 15 2009, 08:42
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Flexz @ Oct 15 2009, 11:12)  Это элементарно контролируется сигнатурой и/или sizeof.
И вообще меня неправильно поняли - я не предлагаю тащить в С концепции С++, а лишь провожу аналогии - это все там и так есть, просто приглядитесь повнимательнее. Сигнатура - проверка run-tmie + занимает ресурсы. А про sizeof - не понял как его можно применять для котнтроля типа того, что нам передали по void указателю Так что не убедили  Нет в Си альтернативы С++ому контролю типов. 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; }
|
|
|
|
|
Oct 16 2009, 03:08
|

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

|
Цитата(demiurg_spb @ Oct 15 2009, 22:42)  Поделитесь пожалуйста сакральными знаниями, когда const может быть ещё и volatile? Что вас так удивляет? Представьте себе регистр только для чтения - регистр специальных функций (SFR) процессора: например, регистр данных приемника UART'а. Чтение из него сбрасывает флаг прерывания от приемника. Т.е. чтение надо делать обязательно. Писать нельзя. Вот вам и const volatile. Обычная вещь.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 16 2009, 20:25
|

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

|
Цитата(dxp @ Oct 16 2009, 07:08)  Что вас так удивляет? Меня удивляет, что в приведённом примере был не регистр... Цитата Представьте себе регистр только для чтения - регистр специальных функций (SFR) процессора... Да, за этот наглядный пример спасибо. А то меня как-то замкнуло на том, что const это константа и всё (т.е. её нельзя изменить и сама собой она не поменяется, а volatile тут сильно всё меняет).
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|