-
- Это я понимаю, упоролся ужэ. Я объявляю переменную в Н-файле и подключаю его в майн. По идее, этого должно
быть достаточно. Но МРС требует, чтобы этот Н-файл был подключён в
Ц-файле, где используется переменная, иначе, ругается, что она не
объявлена. А при подключении, ругается, что она переопределена. У
меня щас возникло нехорошее предчувствие, посмотрел внимательно на
заготовку проекта МРС-студии, а там такое: mse homjak(244 знак., 17.07.2023 13:48)
- Дык эта... Китайцы ни при чём. Это пророки Керниган и Ричи при чём.
И они ни в чём не уиноуаты, ибо пророки. А вы учите их священное
писание, и буде вам щастя. - SciFi(17.07.2023 14:06 - 14:32)
- Дык, ладно бы я, сирый и убогий. Тут местный гуру был необычайно
озадачен. Вот, ради прикола, совсем пустой проект: И сообщение, что
всё совсем плохо: mse homjak(316 знак., 17.07.2023 14:24, ссылка, ссылка)
- Переменная должна быть И объявлена (extern), И создана. Причем
создана ТОЛЬКО в одном месте. В вашем примере, или в addon.c, или в
main.c нужно добавить: Cкpипaч(64 знак., 17.07.2023 16:00)
- Не создана, а определена. Причём определена посредством
определения. Троешники, блин... - SciFi(17.07.2023 16:04)
- Я чтобы понятнее, почему так. Создана - выделена память, объявлена
- компилятору рассказано какого типа она будет. - Cкpипaч(17.07.2023 16:06)
- По уставу при отказе от официальной терминологии следует сразу
переходить на мат, так понятнее всего. - SciFi(17.07.2023 16:32)
- У меня спец.разрешение. - Cкpипaч(17.07.2023 16:33)
- ЕМНИП декларированная переменная может быть и не создана, если она
не используется (если она не static конечно). - reZident(17.07.2023 16:16)
- А "декларирована" это объявлена или определена? %) - Cкpипaч(17.07.2023 16:21)
- Цитата из букваря Кернигана и Ричи: "Внешняя переменная должна быть определена, причем только один раз, вне текста любой функции; в этом случае ей будет выделена память. Она должна быть объявлена во всех функциях, которые хотят ею пользоваться. Объявление содержит сведения о типе переменной. Объявление может быть явным, в виде инструкции extern, или неявным, когда нужная информация получается из контекста" - reZident(17.07.2023 17:04)
- Может. Но это уже совсем другая история :) - Cкpипaч(17.07.2023 16:19)
- А "декларирована" это объявлена или определена? %) - Cкpипaч(17.07.2023 16:21)
- По уставу при отказе от официальной терминологии следует сразу
переходить на мат, так понятнее всего. - SciFi(17.07.2023 16:32)
- Я чтобы понятнее, почему так. Создана - выделена память, объявлена
- компилятору рассказано какого типа она будет. - Cкpипaч(17.07.2023 16:06)
- Не создана, а определена. Причём определена посредством
определения. Троешники, блин... - SciFi(17.07.2023 16:04)
- Всё правильно компилятор говорит. Всё-таки обратитесь к священным
текстам. Там вам разъяснят, что такое объявление, что такое
определение, в каких местах и в каком числе это всё должно
присутствовать. В этой ветке об этом уже говорилось, но вы успешно
проигнорировали. - SciFi(17.07.2023 14:30)
- До сих пор, я объявлял переменную в Х-файле, инклудил его в майн.ц
и больше ниучом себе не отказывал. Создавал файлы.ц с функцыями,
инклудил их в майн.ц и ни одна переменная не страдала. Ни в ГЦЦ для
АВР, ни в ГЦЦ для ПИК32 такой %ни не было. - mse homjak(17.07.2023 14:40)
- Ходил под пулями и ни одну не поймал. Везунчик! :-) - SciFi(17.07.2023 14:42)
- Какие пули? Там всё логично: инклуд, как банальная вставка текста
из файла в майн. Чо там можэт пойти не так? - mse homjak(17.07.2023 14:47)
- Месье знает толк в развлечениях. Tyмблep(1097 знак., 17.07.2023 16:11)
- Если вы посмотрите на файлы прожэкта, то увидите, что ваш пример
принцыпиально отличается от моего и в таком варианте у меня проблем
нет. Если использовать в SomeRoutine() переменную XX_MM, то, по
идее, огребёте как и я. Например, таким образом: mse homjak(347 знак., 17.07.2023 16:47 - 17:18, ссылка, ссылка)
- Нет, это не так. Tyмблep(900 знак., 17.07.2023 18:00)
- Именно для того, чтобы собрать все глобальные переменные в один файл, всё и затеяно. - mse homjak(17.07.2023 18:10)
- Должен признаться - однажды gcc сделал так: Tyмблep(218 знак., 17.07.2023 18:10)
- SciFi - прав. - Cкpипaч(17.07.2023 17:01)
- Спору нет, знать бы в чом... - mse homjak(17.07.2023 17:06)
- В *.h файлы следует включать объявления extern int var; а саму int var; определить только в одном main.c. Так
будет кошернее и всех должно устроить. - reZident(17.07.2023 17:18)
- Так оно кошерно, но когда в майн болтается куча переменных... - mse homjak(17.07.2023 17:21)
- Можно и не в main, ключевое - только в одном месте. Конечно,
логичнее придерживаться модульной структуры и создавать
(определять) переменную только в том *.с, в котором функции с ней
работающие. - Cкpипaч(17.07.2023 17:29)
- Проблема в том, что работать с кой-какими переменными будут во
многих *.ц. Оттого и кипишь. - mse homjak(17.07.2023 17:34)
- А я наверное пишу совсем неправильно и потому во всех проектах создаю для main.c кроме main.h еще и var.h. В main.h пишу все общие дефайны проекта и typedef-ы, а в var.h глобальные переменные. Ну а extern-ы в соответствующих c-файлах. Глобальные - по минимуму. - my504(17.07.2023 22:21)
- Модульность. Геттеры и сеттеры (условно), но на самом деле что-то
более осмысленное должно быть. Это же йэзыг высокого
штиляуровня. Если хотите превратить его обратно в ассемблер, сам себе злобный буратина. Впрочем, у нас швабода, можно и ассемблер на сях. - SciFi(17.07.2023 18:33)- Настоящий Программист способен на любом языке написать программу на
Фортране(С) - mse homjak(17.07.2023 19:16)
- Я пишу на Паскале. На любом языке :) Cкpипaч(42 знак., 17.07.2023 19:18)
- Я пишу под давлением 100500 Паскалей :-( - SciFi(17.07.2023 19:20)
- Вообще-то, Паскаль это апафеоз структурного программирования. Не
объектного, и не функционального. В принципе, чтобы код работал -
самое то. - Cкpипaч(17.07.2023 19:22)
- Когда-то давным-давно я даже что-то о нём знал. Осталось
воспоминание, что там значительное пересечение с сями. Модульность
достигается похожим образом. - SciFi(17.07.2023 19:27)
- В общем-то достаточно было запомнить одно различие :. Паскаль -
Европа, Ц - Пиндостан. - Kpoк(17.07.2023 21:02)
- Си - главный китайский начальник! - SciFi(17.07.2023 21:05)
- В общем-то достаточно было запомнить одно различие :. Паскаль -
Европа, Ц - Пиндостан. - Kpoк(17.07.2023 21:02)
- Когда-то давным-давно я даже что-то о нём знал. Осталось
воспоминание, что там значительное пересечение с сями. Модульность
достигается похожим образом. - SciFi(17.07.2023 19:27)
- Вообще-то, Паскаль это апафеоз структурного программирования. Не
объектного, и не функционального. В принципе, чтобы код работал -
самое то. - Cкpипaч(17.07.2023 19:22)
- Я пишу под давлением 100500 Паскалей :-( - SciFi(17.07.2023 19:20)
- Я пишу на Паскале. На любом языке :) Cкpипaч(42 знак., 17.07.2023 19:18)
- Настоящий Программист способен на любом языке написать программу на
Фортране(С) - mse homjak(17.07.2023 19:16)
- Почитай классиков. Серьёзно. Тебе уже раз пять пересказали как это ими было задумано и как работает. - Cкpипaч(17.07.2023 17:37)
- Проблема в том, что работать с кой-какими переменными будут во
многих *.ц. Оттого и кипишь. - mse homjak(17.07.2023 17:34)
- Ну так кашрут и эстетика ни разу не синонимы. Вообще я (когда программизЪмом от неизбежности страдал) глобальные переменные в глобальную структуру упихивал. Для эстетизЪму. - reZident(17.07.2023 17:24)
- Можно и не в main, ключевое - только в одном месте. Конечно,
логичнее придерживаться модульной структуры и создавать
(определять) переменную только в том *.с, в котором функции с ней
работающие. - Cкpипaч(17.07.2023 17:29)
- Так оно кошерно, но когда в майн болтается куча переменных... - mse homjak(17.07.2023 17:21)
- Читайте учебник. Как вариант, самый первый от Кернигана и Ричи. Cкpипaч(113 знак., 17.07.2023 17:11)
- В *.h файлы следует включать объявления extern int var; а саму int var; определить только в одном main.c. Так
будет кошернее и всех должно устроить. - reZident(17.07.2023 17:18)
- Спору нет, знать бы в чом... - mse homjak(17.07.2023 17:06)
- Нет, это не так. Tyмблep(900 знак., 17.07.2023 18:00)
- Если вы посмотрите на файлы прожэкта, то увидите, что ваш пример
принцыпиально отличается от моего и в таком варианте у меня проблем
нет. Если использовать в SomeRoutine() переменную XX_MM, то, по
идее, огребёте как и я. Например, таким образом: mse homjak(347 знак., 17.07.2023 16:47 - 17:18, ссылка, ссылка)
- Отказ от чтения священных текстов обрекает вас на вечные муки. Что ж, столь тяжкий грех должен караться, всё справедливо. - SciFi(17.07.2023 14:48)
- Месье знает толк в развлечениях. Tyмблep(1097 знак., 17.07.2023 16:11)
- Какие пули? Там всё логично: инклуд, как банальная вставка текста
из файла в майн. Чо там можэт пойти не так? - mse homjak(17.07.2023 14:47)
- Ходил под пулями и ни одну не поймал. Везунчик! :-) - SciFi(17.07.2023 14:42)
- До сих пор, я объявлял переменную в Х-файле, инклудил его в майн.ц
и больше ниучом себе не отказывал. Создавал файлы.ц с функцыями,
инклудил их в майн.ц и ни одна переменная не страдала. Ни в ГЦЦ для
АВР, ни в ГЦЦ для ПИК32 такой %ни не было. - mse homjak(17.07.2023 14:40)
- Баним в майне addon() и всё, никто ни на что не ругается. Особенно,
на то, что в майне есть ундефинед референсе. - mse homjak(17.07.2023 14:29)
- Не понял, почему не ругается? Andreas(1 знак., 17.07.2023 15:00, ссылка)
- Переменная должна быть И объявлена (extern), И создана. Причем
создана ТОЛЬКО в одном месте. В вашем примере, или в addon.c, или в
main.c нужно добавить: Cкpипaч(64 знак., 17.07.2023 16:00)
- Дык, ладно бы я, сирый и убогий. Тут местный гуру был необычайно
озадачен. Вот, ради прикола, совсем пустой проект: И сообщение, что
всё совсем плохо: mse homjak(316 знак., 17.07.2023 14:24, ссылка, ссылка)
- Дык эта... Китайцы ни при чём. Это пророки Керниган и Ричи при чём.
И они ни в чём не уиноуаты, ибо пророки. А вы учите их священное
писание, и буде вам щастя. - SciFi(17.07.2023 14:06 - 14:32)
- Это я понимаю, упоролся ужэ. Я объявляю переменную в Н-файле и подключаю его в майн. По идее, этого должно
быть достаточно. Но МРС требует, чтобы этот Н-файл был подключён в
Ц-файле, где используется переменная, иначе, ругается, что она не
объявлена. А при подключении, ругается, что она переопределена. У
меня щас возникло нехорошее предчувствие, посмотрел внимательно на
заготовку проекта МРС-студии, а там такое: mse homjak(244 знак., 17.07.2023 13:48)