Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Предупреждение компилятора (inline-функция) / 10 сообщений из 10, страница 1 из 1
14.12.2006, 11:32
    #34199156
adm.Beat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
Получают следующее:

"Functions containing some return statements are not expanded inline"

в примерно такой коде:

Код: plaintext
1.
2.
3.
4.
inline AnsiString TItemStyle::GetRegValueBackColor(void)
{
	return Path + "\\BackColor";
};

почему компилер не хочет ее встраивать?

з.ы. + чем ему не нравятся функции с "пропущенными" return'ами?
...
Рейтинг: 0 / 0
14.12.2006, 12:02
    #34199301
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
adm.Beat"Functions containing some return statements are not expanded inline"
почему компилер не хочет ее встраивать?
з.ы. + чем ему не нравятся функции с "пропущенными" return'ами?

Компилятор написали обычные люди и вложили в него некоторые идеи. Твой код плохо согласуется с их реализацией и компилятор вынужден выругаться.
Попробуй
return AnsiString(Path) + "\\BackColor";

Кроме того, а что у тебя за страсть всовывать все, что ни попадя в inline?
...
Рейтинг: 0 / 0
14.12.2006, 12:25
    #34199418
adm.Beat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
то был лишь пример.

более реальный (а почему бы не встроить?):
inline AnsiString GetFormSID(TForm *Form) { return Form->ClassName(); }
...
Рейтинг: 0 / 0
14.12.2006, 12:29
    #34199447
adm.Beat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
ни так return AnsiString(Path) + "\\BackColor"; ибо path и есть ansistring
ни так return AnsiString(Path) + "\\BackColor" ибо все к тому и приведется

есть еще идеи? ;)
...
Рейтинг: 0 / 0
14.12.2006, 13:06
    #34199653
adm.Beat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
как я понял встраиваемые функции не могут вовзращать нестандартные типы (объекты и т.п.)
с простыми типами все ок.
...
Рейтинг: 0 / 0
14.12.2006, 13:37
    #34199849
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
проблема в том что оператор +() это тоже функция и она не инлайнится..
(почему - другой вопрос :-)) смотри её код..
__declspec(noinline) либо ещё чего :-)
...
Рейтинг: 0 / 0
14.12.2006, 13:42
    #34199880
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
adm.Beatто был лишь пример.

более реальный (а почему бы не встроить?):
inline AnsiString GetFormSID(TForm *Form) { return Form->ClassName(); }

аа. дык Виртуальный метод может быть?
...
Рейтинг: 0 / 0
14.12.2006, 14:02
    #34199977
adm.Beat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
Палестинецпроблема в том что оператор +() это тоже функция и она не инлайнится..
(почему - другой вопрос :-)) смотри её код..
__declspec(noinline) либо ещё чего :-)
почему компилер не вставляет вызов оператора (функции) в таком случае (т.е. по приниципу define)?

>>аа. дык Виртуальный метод может быть?
up
...
Рейтинг: 0 / 0
14.12.2006, 17:22
    #34200883
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
Все посты в треде относительно почему оно не инлайнится есть не более чем измышления постящих.

Такая маленькая функция конечно вполне хороший кандидат на inline.

Виртуальные методы можно инлайнить (только не всегда будут они инлайниться).

Инлайн-функции могут вовзращать все что угодно, ограничений нет.

Инлайнится или нет оператор + (или любая другая функция) к делу никак не относится.

Надо помнить, что inline - это не более чем рекомендация компилятору, он может очень легко ей не следовать, это его право. Обычно компилятор имеет другую нестандартную инструкцию, жесткую, которая является требованием эту функцию заинлайнить. Там уже будет при неудаче ошибка.

Почему компилятору не нравится return - я не знаю, возможно потому что должен сконструироваться и вернутся временный объект, но почему его нельзя инлайнить - я не понимаю.

Можно попробовать возвращать константную ссылку (если есть на что, конечно ) как то:

inline const AnsiString& TItemStyle::GetRegValueBackColor(void) { ... }
...
Рейтинг: 0 / 0
14.12.2006, 17:49
    #34200995
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предупреждение компилятора (inline-функция)
Все посты в треде относительно почему оно не инлайнится есть не более чем измышления постящих.
+1 ;-)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Предупреждение компилятора (inline-функция) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]