- 
	- Кароч, промблемма рассосалось, всем спасибо за участие. - 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)
 
- почему дичь?  8051(300 знак., 17.07.2023 16:55, 
 
- Тогда действительно какая-то дичь с ошибкой переопределения. - 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)