реклама на сайте
подробности

 
 
> Как заставить IAR
_Артём_
сообщение Mar 25 2007, 00:09
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



не использовать команду CALL при вызове inline-функции?
Но не используя макросы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex11
сообщение Mar 25 2007, 00:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



#pragma inline=forced
Это если собственная функция объявлена как inline, а если встроенная, то может и не помочь.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 25 2007, 01:56
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Alex11 @ Mar 24 2007, 23:44) *
#pragma inline=forced
Это если собственная функция объявлена как inline, а если встроенная, то может и не помочь.


То есть функция вида

inline void SomeFunction(void)
{
// тело функции
}

не будет откомпилирована как inline-функция? Почему?
Кстати функция своя, а не встроенная
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 25 2007, 03:11
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Артём_ @ Mar 25 2007, 00:56) *
не будет откомпилирована как inline-функция? Почему?
Кстати функция своя, а не встроенная
Режим компиляции С или С++? Если С, то static void SomeFunction(void); если С++, то как сказал Alex11
Код
#pragma inline=forced
inline void SomeFunction(void)
{
// тело функции
}
или
_Pragma("inline=forced") inline void SomeFunction(void)
{
// тело функции
}
Но это определение функции должно быть в той же единице компиляции, что и место вызова (т.е. не в другом С/С++ файле).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 25 2007, 11:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Для 'С++' компиляторов inline штатный прибамбас, посему:
inline void SomeFunction(void)
Для 'C' компиляторов возможность инлайнить функции поддерживается опционально, как кому удобнее. Конкретно у IAR поддерживается через #pragma inline, причем #pragma перед объявлением прототипа функции.
Квалификатор inline у 'C' компиляторов обычно такой smile.gif :
#define inline

Это:
Цитата(Сергей Борщ @ Mar 25 2007, 02:11) *
#pragma inline=forced
inline void SomeFunction(void)

уже попытка сделать "масло масляное".

Цитата(_Артём_ @ Mar 24 2007, 23:09) *
не использовать команду CALL при вызове inline-функции?

Почитать документацию на IAR компилятор, там все подробно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 25 2007, 12:03
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ Mar 25 2007, 10:40) *
Для 'С++' компиляторов inline штатный прибамбас, посему:
Это:
... Тут поскипана цитата, восстанавливать лень, жалобы к Esquire...
уже попытка сделать "масло масляное".
А вот вам фиг! "просто" inline выражает компилятору наше желание заинлайнить. Но он, руководствуясь своими соображениями (а конкретно - количеством вызовов данной функции в данном файле) может наше желание проигнорировать и оставить вызов функции. _Pragma("inline=forced") или #pragma inline=forced заставляет компилятор отставить самодеятельность и делать как сказано.
Цитата(zltigo @ Mar 25 2007, 10:40) *
Почитать документацию на IAR компилятор, там все подробно.
Воистину
Цитата
Whether the inlining actually takes place is subject to the compiler’s heuristics. Specifying #pragma inline=forced disables the compiler’s heuristics and forces the inlining. If the inlining fails for some reason, for example if it cannot be used with the function type in question (like printf), an error message is emitted.
tongue.gif
Цитата(zltigo @ Mar 25 2007, 10:40) *
Для 'C' компиляторов возможность инлайнить функции поддерживается опционально, как кому удобнее.
Угу. Как там насчет документации было выше? wink.gif
Цитата
#pragma inline[=forced] This is similar to the C++ keyword inline, but has the advantage of being available in C code.
В вопросе явно был указан IAR. А объявление функции как static при одном-двух вызовах в единице компиляции часто приводит к встраиванию и без прагмы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 09:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016