razrab83 21 3 августа, 2023 Опубликовано 3 августа, 2023 (изменено) · Жалоба IAR 8.5, stm32f*, пишу код в *.с файле void myFunc(void) { drfkgjklj(); } drfkgjklj() - такая функция ни где не определена и ни где не объявлена. Запускаю сборку. Компилятор выдает Quote Warning[Pe223]: function "drfkgjklj" declared implicitly Какой к черту implicitly? Это всегда так в си, или где-то в настройках проекта лядский флаг стоит? Я ожидаю, что компилятор выдаст Error[Pe020]: identifier "drfkgjklj" is undefined Изменено 3 августа, 2023 пользователем haker_fox Внимательно выбирайте раздел для создания темы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 17 минут назад, razrab83 сказал: Какой к черту implicitly? Это всегда так в си, или где-то в настройках проекта лядский флаг стоит? Я ожидаю, что компилятор выдаст Error[Pe020]: identifier "drfkgjklj" is undefined Компилятор ругается на implicitly (Pe223), когда функция вызвана без прототипа. То бишь функцию сперва требуется объявить (чтобы компилятор понял какого типа у нее аргументы) и уж только потом ее вызывать. А на identifier ругается (Pe020), когда используете переменную и массив, которые прежде не были созданы. Это разные ошибки, а потому и коды у них разные - Pe223 и Pe020. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 августа, 2023 Опубликовано 3 августа, 2023 (изменено) · Жалоба 1 hour ago, razrab83 said: IAR 8.5, stm32f*, пишу код в *.с файле IAR - это грёбаный трэш. Столкнулся с тем, что оптимизация в IAR - ***. В GCC результат лучше. Результаты замера ниже - кодек Рида-Соломона : на 4096 слов + 256 проверочные. Слева - IAR, справа - GCC. Воркбенч - погонять: rs.zip Изменено 3 августа, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 40 minutes ago, razrab83 said: Это всегда так в си Конечно всегда. Надо хотя бы стандарт С по диагонали посмотреть. 13 minutes ago, repstosw said: что оптимизация в IAR - *** Какие настройки оптимизации ? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 29 minutes ago, x893 said: Какие настройки оптимизации ? IAR: GCC: -Ofast -mfloat-abi=hard -mfpu=vfpv4 -mfpu=neon -fomit-frame-pointer -ftree-vectorize -fno-math-errno Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 29 минут назад, repstosw сказал: IAR: для IAR частенько "balanced" оптимизация генерит более быстрый код, чем "speed". А иногда идаже и "size" оптимизация даёт более быстрый код. Так как компилятор, выполняя оптимизацию, не учитывает размеров кеша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 4 hours ago, repstosw said: IAR - это грёбаный трэш. Давно не работал с IAR, но когда последний раз переносил проект из него в GCC (если не ошибаюсь, была версия 8 ИАРа), обратил внимание, что по умолчанию в нём отключено очень много проверок кода, поэтому он легко проглатывает всякую хрень, подобную показанной выше. Зато работает ооочень быстро. Включение всех проверок в разы снижало скорость компиляции, зато поведение компилятора в виде сообщений об ошибках и предупреждений становилось похожим на GCC. Скорость кода не сравнивал, зато чётко было видно, что сборка кода компилятором С++ от ИАР выявила те же самые ошибки, которые в С были выявлены только статическим анализатором. А вот в GCC наоборот, сразу включено много проверок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 6 hours ago, tonyk_av said: Включение всех проверок в разы снижало скорость компиляции Можно узнать, о каких проверках Вы говорите? Я добавляю только такой ключ ко всем проектам: --warnings_are_errors Чтобы не оставить ни одного предупреждения в неисправленном состоянии) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 2 hours ago, haker_fox said: Можно узнать, о каких проверках Вы говорите? В той версии ИАР, с которой я пересекался, была вкладка с настройками компилятора. Их там было не мало. Например, из того что помню, реакция на неопределённую weak-функцию: поставить адрес 0 и продолжить компиляцию или выдать ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 4 августа, 2023 Опубликовано 4 августа, 2023 (изменено) · Жалоба 10 часов назад, tonyk_av сказал: в GCC (если не ошибаюсь, была версия 8 ИАРа), обратил внимание, что по умолчанию в нём отключено очень много проверок кода, поэтому он легко проглатывает всякую хрень, подобную показанной выше. сделал холоворд в кубе на пуре СИ (gcc) int main(void) { HAL_Init(); sdfds(); SystemClock_Config(); ... Компилятор выдал ошибку (не линкер, а компилятор) ВЫДАЛ ВОРНИНГ!!!, а линкер ошибку. arm-none-eabi-gcc "../Core/Src/main.c" warning: implicit declaration of function 'sdfds' с++ на такое выдают ошибку, а си ворнинг. Конечно для меня это дико. дабылКлик по ошибке компилятора - и улетаешь на нужную строку кода. ДабылКлик по ошибке линкера и .... НИЧЕГО. погуглил.... есть в gcc "-Wimplicit-function-declaration", а ещё есть "-pedantic-errors". pedantic-errors генеригует на подобную дичь, как и пологается, ошибку компилятора. Но это "загнивающие" gcc. А что касается православного тру иаровского компилятора, то у него нет ни pedantic-errors, ни Wimplicit-function-declaration. Заседание продолжается..... кто знает, как в иаровском компиляторе заставить генерировать ошибку на implicit function declaration? ps 15 часов назад, x893 сказал: Какие настройки оптимизации ? оптимизация отключена. 15 часов назад, x893 сказал: Надо хотя бы стандарт С по диагонали посмотреть. а в стандарте си описано на что компилятор должен выдавать ошибки, а на что ворненги? Изменено 4 августа, 2023 пользователем razrab83 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба Цитата Если функция предварительно не была объявлена, а её имя встречается в выражении, сразу за которым следует открывающая скобка, то она неявно объявляется как функция, возвращающая результат типа int и ничего не предполагается о её аргументах. В этом случае компилятор не сможет выполнить проверку типов аргументов и арность, когда функция вызывается с некоторыми аргументами. Это потенциальный источник проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 августа, 2023 Опубликовано 4 августа, 2023 (изменено) · Жалоба 14 hours ago, jcxz said: для IAR частенько "balanced" оптимизация генерит более быстрый код, чем "speed". А иногда идаже и "size" оптимизация даёт более быстрый код. Так как компилятор, выполняя оптимизацию, не учитывает размеров кеша. Я проверил эти утверждения. Увы, после установки Balanced или Size скорость выполнения программы стала ещё меньше. Обновлённый бенчмарк: rs2.zip Слева - GCC 11, справа - IAR 7.60 (процессор allwinner T113-s3 На штатной частоте): Изменено 4 августа, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба В 04.08.2023 в 08:19, razrab83 сказал: кто знает, как в иаровском компиляторе заставить генерировать ошибку на implicit function declaration? Project->Options...->C/C++Compiler->Diagnostics->Treat these as errors: вписать Pe223 ps можно больше, синтаксис Pe223, Pa181, Pe177 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 9 минут назад, juvf сказал: Project->Options...->C/C++Compiler->Diagnostics->Treat these as errors: вписать Pe223 Спасибо! Проблема решена. Расходимся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 2 hours ago, razrab83 said: Компилятор выдал ошибку (не линкер, а компилятор) ВЫДАЛ ВОРНИНГ!!!, а линкер ошибку. Возможно, ИАР изменил настройки компилятора и линкёра в новых версиях. Я потому и запомнил ту ситуацию с weak, что ни компилятор, ни линкёр даже предупреждения не давали. В программе адреса этих функций находились в таблице переходов, поэтому я не сразу догадался, почему МК уходил на адрес 0. Кстати, после того проекта я стал даже сишные файлы стал компилировать плюсОвым компилятором, ибо глубина анализа программы у плюсОвого больше, поэтому ошибок и предупреждений он выдаёт заметно больше, хотя работает на порядок быстрее статического анализатора для сишных программ, выдающего в итоге те же самые ошибки и предупреждения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться