-
- Кароч, промблемма рассосалось, всем спасибо за участие. - mse homjak(17.07.2023 17:25)
- Ну ахуеть теперь! А убийца садовник? - NAUT(17.07.2023 18:15)
- K&R - RED_DRAGON(17.07.2023 18:53)
- Кай Ричи - Alex68(17.07.2023 19:29)
- Красное & Red. - SciFi(17.07.2023 19:35)
- фотофакт: SciFi(1 знак., 17.07.2023 19:01, картинка)
- Кай Ричи - Alex68(17.07.2023 19:29)
- K&R - RED_DRAGON(17.07.2023 18:53)
- Ну ахуеть теперь! А убийца садовник? - NAUT(17.07.2023 18:15)
- Где-то в одном месте в сишнике есть определение глобальной переменной и без extern, NAUT(171 знак., 17.07.2023 15:35)
- а зачем у вас переменные в *.h? - RED_DRAGON(17.07.2023 15:23)
- Даже не так. Зачем глобальные переменные? Это же харам, их выдают
только под расписку и не более одной штуки в одни руки. - SciFi(17.07.2023 15:25)
- потомушта ими буду пользоваться во всём проекте. Как минимум, в трёх разных местах. А то и больше. - mse homjak(17.07.2023 16:50)
- Дык у ТС неправильный мунривер просто RED_DRAGON(1 знак., 17.07.2023 15:34, youtube)
- MournRiver: cry me a river... - SciFi(17.07.2023 15:46)
- Даже не так. Зачем глобальные переменные? Это же харам, их выдают
только под расписку и не более одной штуки в одни руки. - SciFi(17.07.2023 15:25)
- Покажи краткий пример. VVB(107 знак., 17.07.2023 11:57)
- примерно так: mse homjak(342 знак., 17.07.2023 12:41)
- То есть вот так не умеет парсить? Неудивительно. Место для
переменной data выделяется и в модуле main и в модуле fun. Надо
где-то в одном месте выделить. VVB(209 знак., 17.07.2023 12:44)
- Должно быть вот так (тест на внимательность) Cкpипaч(237 знак., 17.07.2023 13:10)
- Нет, походу, не умеет. Ругается, как обычно. - mse homjak(17.07.2023 12:50)
- Надо убрать int data = 0; или int data = 1; в одном из модулей и
оставить только в одном. Я специально разные значения присвоил,
чтобы подчеркнуть, что компилятор не умеет за человека думать и
присваивать "правильное" значение (он не знает, какое: 0 или 1).
Переменная data примет нужное значение до запуска main() в "c
runtime". - VVB(17.07.2023 12:54)
- переменной не присваивается значение при определении. Переменная
принимает участие в вычислениях и к ней можэт быть доступ из разных
Ц-файлов. Что там присвоит ей компилятор до майн, значения не
имеет. mse homjak(24 знак., 17.07.2023 13:04)
- Тут вы не правы. Переменной всегда присваивается значение при
"определении". Если значение явно не присвоено, то присваивается
"0". VVB(441 знак., 17.07.2023 13:23, ссылка)
- Это я понимаю, упоролся ужэ. Я объявляю переменную в Н-файле и подключаю его в майн. По идее, этого должно
быть достаточно. Но МРС требует, чтобы этот Н-файл был подключён в
Ц-файле, где используется переменная, иначе, ругается, что она не
объявлена. А при подключении, ругается, что она переопределена. У
меня щас возникло нехорошее предчувствие, посмотрел внимательно на
заготовку проекта МРС-студии, а там такое: 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)
- Тут вы не правы. Переменной всегда присваивается значение при
"определении". Если значение явно не присвоено, то присваивается
"0". VVB(441 знак., 17.07.2023 13:23, ссылка)
- переменной не присваивается значение при определении. Переменная
принимает участие в вычислениях и к ней можэт быть доступ из разных
Ц-файлов. Что там присвоит ей компилятор до майн, значения не
имеет. mse homjak(24 знак., 17.07.2023 13:04)
- Надо убрать int data = 0; или int data = 1; в одном из модулей и
оставить только в одном. Я специально разные значения присвоил,
чтобы подчеркнуть, что компилятор не умеет за человека думать и
присваивать "правильное" значение (он не знает, какое: 0 или 1).
Переменная data примет нужное значение до запуска main() в "c
runtime". - VVB(17.07.2023 12:54)
- То есть вот так не умеет парсить? Неудивительно. Место для
переменной data выделяется и в модуле main и в модуле fun. Надо
где-то в одном месте выделить. VVB(209 знак., 17.07.2023 12:44)
- примерно так: mse homjak(342 знак., 17.07.2023 12:41)
- Я извиняюсь за глупый вопрос, а #ifndef в *.h файлах имеется? - reZident(17.07.2023 11:41)
- Да. МРС генерит "h" файлы по шаблону. - mse homjak(17.07.2023 11:45)
- Тогда действительно какая-то дичь с ошибкой переопределения. - reZident(17.07.2023 11:46)
- почему дичь? 8051(300 знак., 17.07.2023 16:55, )
- В прошлом проекте, он кюшять не мог, требовал, чтобы переменные из аналогичного "*.h" были extern, ругался дажэ из майн. Щас жрёт... Песдец кокойты... - mse homjak(17.07.2023 11:52)
- Тогда действительно какая-то дичь с ошибкой переопределения. - reZident(17.07.2023 11:46)
- Да. МРС генерит "h" файлы по шаблону. - mse homjak(17.07.2023 11:45)
- Это нормально. ctl+f по всем файлам. Смотришь, где ещё вглубь это
всё. - Бapбoc(17.07.2023 11:39)
- А что "цтрл-ф"ить? В одном случае он не находит переменную, в
другом, говорит, что несколько раз переопределена. всё работает,
если всё писать в майн.ц. Это, бля, чо за дичь? - mse homjak(17.07.2023 11:44)
- При сборке консоль что выводит? Ругается на сборку или сам
индексатор? Что во всплывающей подсказке при наведении на ошибку? - Dingo(17.07.2023 12:21)
- Если в Ц-файле подключон Н-файл с определением переменной, ругается
на переопределение. Если не подключон, ругается на переменную, что
не определена. - mse homjak(17.07.2023 12:29)
- *рукалицо* При компиляции или индексатор? - Dingo(17.07.2023 12:34)
- При компиляции. - mse homjak(17.07.2023 12:38)
- Во-о-от! И в консоли пишет с указанием файлов сообщения в стиле
примерно: "previous defined /declared here : ". Посмотрите соседние
строки вывода консоли. - Dingo(17.07.2023 12:44)
- Ну он мне и пишет, что переопределение в файле xxx.h, предыдущее
определение в файле xxx.h. Всё, как мы любим... Т.е. сколько раз мы
его подключили, столько раз он и напишет. - mse homjak(17.07.2023 12:59)
- У вас получается один файл разными путями попадает в одно и то же место Dingo(1167 знак., 17.07.2023 16:05)
- Ну он мне и пишет, что переопределение в файле xxx.h, предыдущее
определение в файле xxx.h. Всё, как мы любим... Т.е. сколько раз мы
его подключили, столько раз он и напишет. - mse homjak(17.07.2023 12:59)
- Во-о-от! И в консоли пишет с указанием файлов сообщения в стиле
примерно: "previous defined /declared here : ". Посмотрите соседние
строки вывода консоли. - Dingo(17.07.2023 12:44)
- При компиляции. - mse homjak(17.07.2023 12:38)
- *рукалицо* При компиляции или индексатор? - Dingo(17.07.2023 12:34)
- Если в Ц-файле подключон Н-файл с определением переменной, ругается
на переопределение. Если не подключон, ругается на переменную, что
не определена. - mse homjak(17.07.2023 12:29)
- похоже, что месье таки забыл, что выделить место (и, если нужно,
при этом задать значение) можно один раз в пределах области
видимости. а extern указывает, что место выделено где-то, потому в
хедере переменные без extern хоть и допустимо описывать (выделять
место), но только при включении хедера не более одного раза. - Vit(17.07.2023 12:10)
- Определил в подключаемом "*.h" переменную, как extern, подключил
"*.h" в "*.с", где используется переменная. Ругается на
переопределение. Если из "*.с" убрать инклуды с "*.h", то ругается,
что переменная не определена. Местный обладатель чорного пояса по Ц
победить не смог. - mse homjak(17.07.2023 12:26)
- Ну и? Ищи, в каком инклуде (из отключенных) она СОЗДАНА (без extern) или объявлена (с extern) - Cкpипaч(17.07.2023 16:12)
- Разжаловать до коричневого. Или здесь у многих "куча полосок на чёрном". - Dingo(17.07.2023 16:07)
- Определил в подключаемом "*.h" переменную, как extern, подключил
"*.h" в "*.с", где используется переменная. Ругается на
переопределение. Если из "*.с" убрать инклуды с "*.h", то ругается,
что переменная не определена. Местный обладатель чорного пояса по Ц
победить не смог. - mse homjak(17.07.2023 12:26)
- Попробуй пересоздать проект, и снова туда добавить файлы, как-то
эта хрень очень похожа на новый Crosscore от андевиц... он на базе
эклипса... эта скотина иногда путается в своих же файлах, где-то
видит, где-то не видит (точнее та часть что добавляет, она видит
что файлы уже учтены в проекте... а та часть что собирает - говорит
нет и всё тут...и никакие условные @make clean не помогают)... и
всё, помогает только пересоздание проекта с импортом-вставкой всех
файлов... - sav6622(17.07.2023 11:50)
- Похер... - mse homjak(17.07.2023 12:01)
- Там, где-нибудь, в конце определений надо поменять 0 на 1. Или наоборот. - Бapбoc(17.07.2023 11:48)
- При сборке консоль что выводит? Ругается на сборку или сам
индексатор? Что во всплывающей подсказке при наведении на ошибку? - Dingo(17.07.2023 12:21)
- А что "цтрл-ф"ить? В одном случае он не находит переменную, в
другом, говорит, что несколько раз переопределена. всё работает,
если всё писать в майн.ц. Это, бля, чо за дичь? - mse homjak(17.07.2023 11:44)
- Кароч, промблемма рассосалось, всем спасибо за участие. - mse homjak(17.07.2023 17:25)