в одном проекте все работает перенес библиотеку в другой проект
компилятор IAR выдает ошибку.
Код: Выделить всё
Error[Li005]: no definition for "Login_enter" Даже не знаю в какую сторону копать.
Код: Выделить всё
Error[Li005]: no definition for "Login_enter" Близко к истине, но не так. В оригинале значится: "By declaring a function inline, you can direct GCC to make calls to that function faster."ARV писал(а):inline - это квалификатор для компилятора, который строит код модуля путем встраивания (т.е. повтора) в нужных местах кода функции, а extern - это квалификатор для линкера, который просто расставляет ссылки на единожды имеющийся где-то код. то есть это взаимоисключающие квалификаторы - нельзя быть одновременно повторяемым куском кода и единственным куском.
В сторону понимания сущности inline. И немного в сторону понимания того, как работает трио препроцессор-компилятор-линкер. Первый лепит из *.h и *.c большие простынки *.(ну скажем pp) и скармливает их компилятору. На выходе компилятора появляется *.o - файл со скомпилированными объектами. Линкер собирает согласно списка все объектные файлы в программу - устанавливает связи (linker- ведь!) между объектами, попутно проверяя все ли ссылки из модулей находят объекты в других модулях и однозначны ли эти связи. Если компилятор изыскивает возможность реально заинлайнить функцию - то как объект в модуле она существовать не будет - и попытка заставить линкер связать вызов из других модулей на такую функцию закономерно обломится.pokk писал(а):Даже не знаю в какую сторону копать.
Код: Выделить всё
MACROS_NAME
functionName
ClassName
varNameМакрос, как вариация дефайна (переназначения, замены текста) - целиком заглавными буквами. Как бы это общепринятое правило, встречающееся во многих-многих исходниках.FreshMan писал(а):Кто какую использует форму записи макроса, дабы в проге было видно четкое различие между оным, переменной и функцией ?
Уважаемый, кто эти "Вы" ? В упор не вижу, кто усердствует с инлайнами.Мурато Мяуконни писал(а):Вы, уважаемые, слишком-то не переусердствуйте с инлайнами то. А то результирующий код ваш будет разрастаться до нев...ных размеров
Как же жить тогда, если нет доверия компилятору ?Не заставляйте компилятор решать за вас, где и как делать.
полностью подерживаю: единство стиля постоянно - залог успеха.Мурато Мяуконни писал(а):Главное, найти для себя наиболее удобную и читаемую схему и следовать ей во всех проектах
лично я придерживаюсь иных правил:Мурато Мяуконни писал(а):Макрос, как вариация дефайна (переназначения, замены текста) - целиком заглавными буквами
Очень просто. Либо вы - хозяин и руководитель, либо компилятор руководит вами, а вы лишь только пожимаете плечами и думаете, что компилятору видней.Аlex писал(а):Как же жить тогда, если нет доверия компилятору ?
разница только в том, что такая обертка потребует от вас править код во всех местах, где макрос вызывался, в то время как мой подход позволяет этого избежать.WiseLord писал(а):По идее, можно макрос-функцию назвать MACRO_NAME(), и обернуть её в void macro_name() {MACRO_NAME()}.
А что это значит ? Что написали 7 строк ? Я не экстрасенс и понятия не имею, сколько, чего и где Вы понаписали.Мурато Мяуконни писал(а):Ну а про "сообщение очевидных вещей" - эт вы напрасно. Если у меня только 5 сообщений на форуме, это вовсе не означает, что я написал на Си только 5 строчек.
УлыбнулоМурато Мяуконни писал(а):По уровню знаний и реализованных проектов я могу и вас переплюнуть, если че как бы вот.
Не стоит мне указывать, что мне делать. Я могу, ненароком, и сказать, куда вам пойти...Мурато Мяуконни писал(а):И кстати, нечего мне тут "минусовать в карму", только за то, что вам че-то не понравилось
С пользовательскими типами - это да, конечно. _t на конце. Хотя лично я не люблю часто переопределять типы. Единственное - это в структурах.ARV писал(а): 1. определение пользовательского типа - всегда с _t на конце, всегда маленькими буквами: point_t
Так-так-так, полегче, полегче. Если вы модератор, то ведите себя подобающе, без хвастовства.Аlex писал(а):Не стоит мне указывать, что мне делать. Я могу, ненароком, и сказать, куда вам пойти...
Лучше на вопрос ответьте, который я вам задал.
Вообще-то я говорил о том, чтобы макрос вызывался только из этой функции. А уже она - в коде.ARV писал(а):разница только в том, что такая обертка потребует от вас править код во всех местах, где макрос вызывался, в то время как мой подход позволяет этого избежать.WiseLord писал(а):По идее, можно макрос-функцию назвать MACRO_NAME(), и обернуть её в void macro_name() {MACRO_NAME()}.
А вы почитайте повнимательнее. У меня всего один пост был, в нём трудно не заметить вопросительных знаков и вопросительную интонацию.Мурато Мяуконни писал(а):Какой вопрос вы задали? Озвучьте, и я вам обстоятельно отвечу.
Откуда же такая усведомлённость в моих знаниях ? И про то, что переплюнут меня, знаем. И про то, пойму ли я ответ, ...Мурато Мяуконни писал(а):Если конечно сочту, что вы поймете ответ.
Опять указыМурато Мяуконни писал(а):ведите себя подобающе
Где вы хвастовство в моих постах увидели ?Мурато Мяуконни писал(а):без хвастовства