Arlleex 178 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 26 минут назад, MrYuran сказал: Я ж говорю, давайте список ключей. Посмотрим, каких не хватает https://habr.com/ru/articles/490850/ Цитата -x c -funsigned-char -funsigned-bitfields -DNDEBUG -I"../sources/application" -O0 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=at90can128 -B "D:\Program Files\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\at90can128" -c -std=c99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" Да я их даже не трогал - какие были стандартные в среде, такие оставил. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба В 27.11.2023 в 14:55, Arlleex сказал: Да я их даже не трогал - какие были стандартные в среде, такие оставил. Ну, собственно, что и требовалось доказать. Ни одной проверки. А потом долгими зимними вечерами обсуждаем "глюки компилятора" Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 8 минут назад, MrYuran сказал: Ну, собственно, что и требовалось доказать. Ни одной проверки. А потом долгими зимними вечерами обсуждаем "глюки компилятора" Проверки на что? Мне то откуда знать, какие перлы в исходниках (я же написал, что я портировал не свои исходники), чтобы расставлять правильные ключи компиляции? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба Ну, как минимум Цитата gcc -Wall enables all warning messages. ... gcc -Wall enables all compiler's warning messages. This option should always be used, in order to generate better code Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 27 ноября, 2023 Опубликовано 27 ноября, 2023 (изменено) · Жалоба Ну а если Вы вашим ГЦЦ скомпилите вот прямо эти самые файлы которые в начале нам продампили - он их и соберет? Или может все же чтото Вы нам недопоказали? Еще было б неплохо посмотреть результат постпроцессинга - как там ваши ваши объявления выглядят? может макро какое порылось А еще може какомто хедере завалялось еще и extern на вашу структуру, или хуже - статик Изменено 27 ноября, 2023 пользователем AlexRayne Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 41 минуту назад, MrYuran сказал: Ну, как минимум Ну, судя по моим ключам, -Wall у меня присутствует. И толку. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 43 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 3 hours ago, Arlleex said: // in global space int i = 0; int i; Однако GCC "схавал" Нифига подобного Вот прям сегодня по ошибке написал такое, так g++ ткнул во вторую строку с предупреждением о неиспользуемой переменной. Надо смотреть на версию стандарта, поддерживаемую компилятором и на то, какие предупреждения разрешены или запрещены. Последние версии gcc стали более строже отслеживать подобное, а g++ на подобное всегда ругался, поэтому собирайте ваши программы g++, и будет вам Щастье. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 30 минут назад, AlexRayne сказал: Ну а если Вы вашим ГЦЦ скомпилите вот прямо эти самые файлы которые в начале нам продампили - он их и соберет? Для примера я показал более, чем достаточно. 3 минуты назад, tonyk_av сказал: Нифига подобного Вот прям сегодня по ошибке написал такое, так g++ ткнул во вторую строку с предупреждением о неиспользуемой переменной. Надо смотреть на версию стандарта, поддерживаемую компилятором и на то, какие предупреждения разрешены или запрещены. Последние версии gcc стали более строже отслеживать подобное, а g++ на подобное всегда ругался, поэтому собирайте ваши программы g++, и будет вам Щастье. g++ - это компилятор С++, как минимум. Сергей правильно заметил выше, что для C++ такое уже не работает (должно свалиться в ошибку redefinition symbol 'i', а не предупреждение с неиспользуемой переменной). В Си эта конструкция законна. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба В 27.11.2023 в 16:37, Arlleex сказал: Ну, судя по моим ключам, -Wall у меня присутствует. И толку. Да, не заметил. Значит, добавить весь арсенал параноика: Цитата # Предупреждения: WARNINGS = -Wall WARNINGS += -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare WARNINGS += -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused # WARNINGS += -Werror и много чего ещё Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 43 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 1 hour ago, Arlleex said: (должно свалиться в ошибку redefinition symbol 'i', а не предупреждение с неиспользуемой переменной) Было именно предупреждение, а не ошибка, я потому и запомнил, что вот ведь, она, переменная, используется в цикле, а компилятор пишет, что она не используется, причём после цикла присваиваю переменной другое значение для промежуточных вычислений- на тебе. Копипаст сделал и зацепил повторное определение. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба вот с объявлением структур ооочень аккуратно надо. и я скакал по этим граблям (получал в разных файлах разные экземпляры структуры под одним и тем же именем). стал делать так, в заголовочнике: #ifndef _sensor #define _sensor struct sensor_general_type{ unsigned short int meash_interval_sec; }; #ifdef sensor_first_appear struct sensor_general_type sensor_general; #else extern struct sensor_general_type sensor_general; #endif #endif в ОДНОМ месте в с или хедере так: #define sensor_first_appear #include "sensor.h" во всех других местах так: #include "sensor.h" Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 24 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба 49 minutes ago, firstvald said: вот с объявлением структур ооочень аккуратно надо оно и видно )) 49 minutes ago, firstvald said: стал делать так, в заголовочнике: это пример как КАТЕГОРИЧЕСКИ делать НЕ НУЖНО )) если смотреть по вашему примеру, то вы объявляете тип структуры в заголовочном файле, судя по наличию этой "конструкции": #ifndef _sensor #define _sensor и в нем же по неведомой причине создаете ее экземпляр: struct sensor_general_type sensor_general; И чтобы избежать очевидных проблем с таким "решением", плодите себе очевидные костыли: #define sensor_first_appear А это когда в умных книжках по си (которому уже небось полвека от роду) пишут черным по белому - экземпляры создавать ТОЛЬКО в объектных С-файлах, а в хедерах максимум объявлять тип! если уж вам так нужны глобальные объекты структур, то создавайте их экземпляры по возможности в одном месте, в одном С-файле, а в хедерах ТОЛЬКО ОБЪЯВЛЕНИЯ их типов и туда же соотв. extern если нужно, чтобы другие объектные файлы "видели" эти глобальные объекты, если прям уж без них никак не получается ) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба вот, ни в коем случае, в сишных не надо. это проходит в том случае, когда у вас маленький проект (вы помните, что где лежит) и когда вы не думаете о том, что ваш код будет использоваться повторно в других проектах . и у вас декларация и объявление получаются тогда в разных файлах. попробуйте как попереносить кусок кода без ошибок копированием из файла в файл, когда пишете и у вас открыто с два три десятка закладок. а, когда вы пишите в пределах одного файла , вы гораздо меньше подвержены таким ошибкам. и вот точно никаких костылей тут нет. поэтому, когда я вижу код, который написан, как в умных книжках с полувековой историей, я понимаю, что ждать бяды. и, хуже того, пацанов продолжают учить такому, люди никогда не занимавшиеся разработкой. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба 4 minutes ago, firstvald said: и вот точно никаких костылей тут нет Ужасный костыль, прямо-таки эталонный. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба расскажите свой вариант. только сначала подумайте. переносим ли ваш код. можно ли его вторично использовать , можно ли вторично использовать в другом проекте декларируемые переменные и пробовали ли вы сами переносить код по частям при портировании другого процессора. и, ребят, внимательно читайте, что было написано и обдумайте. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться