Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
#1

подставляемые функции - C++

05.09.2011, 20:03. Просмотров 1212. Ответов 12
Метки нет (Все метки)

Для этого кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
inline void f()
{
    std :: cout << "Inline function.\n";
}
 
int main()
{
    f();
    std :: cin.get();
    return 0;
}
посмотрел в Visual Studio дизассемблированный код.
Assembler
1
2
3
          f();
0014149E  call        f (141127h) 
          std :: cin.get();
почему осуществляется вызов функции f? или я что-то не так понял?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2011, 20:03     подставляемые функции
Посмотрите здесь:

C++ Найти среднее арифметическое значений функции f(x) в точках a, b, (a+b)/2 используя обращение к функции
C++ Табулирование заданной функции и определение максимального и минимального значения функции в таблице
Вычислить m значений функции f(x) на отрезке [a, b]. Вычисление величины f(x) оформить в виде функции C++
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций C++
Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции C++
C++ Используя перегруженные функции и шаблон функции удалить из массива элемент по индексу
Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pincet
 Аватар для pincet
1204 / 774 / 82
Регистрация: 23.07.2010
Сообщений: 3,934
05.09.2011, 20:05     подставляемые функции #2
компилятор так решил - так ему типа удобнее
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
05.09.2011, 20:07  [ТС]     подставляемые функции #3
pincet, но всё же, почему? в теле функции нет цикла, оно состоит из одной строчки.
dihlofos
Бродяга
 Аватар для dihlofos
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
05.09.2011, 20:07     подставляемые функции #4
Вообще inline вроде как просто рекомендация. Хотя тут ф-ция небольшая, не знаю, почему компилятор так решил.
grizlik78
Эксперт С++
 Аватар для grizlik78
1890 / 1422 / 104
Регистрация: 29.05.2011
Сообщений: 2,977
05.09.2011, 20:08     подставляемые функции #5
stdcout, оптимизацию по скорости включал?
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 20:09     подставляемые функции #6
Да, не раз уже обсуждалось, что современные компиляторы сами решают, какие функции инлайнить, а какие нет Можно делать __forceinline (в VC++) или __inline__ (в GCC), но смысл? )
Bers
Заблокирован
05.09.2011, 20:10     подставляемые функции #7
inline - это не приказ компилятору, а лишь пожелание.
Он может и не инлайн заинлайнить) Если посчитает нужным. И наоборот - не все инлайн сделать инлайнами.
pincet
 Аватар для pincet
1204 / 774 / 82
Регистрация: 23.07.2010
Сообщений: 3,934
05.09.2011, 20:10     подставляемые функции #8
Цитата Сообщение от stdcout Посмотреть сообщение
pincet, но всё же, почему? в теле функции нет цикла, оно состоит из одной строчки.
хз. я компиляторы не пишу - я их пользую
dihlofos
Бродяга
 Аватар для dihlofos
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
05.09.2011, 20:12     подставляемые функции #9
Цитата Сообщение от Bers Посмотреть сообщение
Он может и не инлайн заинлайнить)
Так что тогда, стоит вообще забыть это слово - inline?
pincet
 Аватар для pincet
1204 / 774 / 82
Регистрация: 23.07.2010
Сообщений: 3,934
05.09.2011, 20:13     подставляемые функции #10
Цитата Сообщение от dihlofos Посмотреть сообщение
Так что тогда, стоит вообще забыть это слово - inline?
Все на асм 8)
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,819
Завершенные тесты: 2
05.09.2011, 20:32     подставляемые функции #11
Цитата Сообщение от dihlofos Посмотреть сообщение
Так что тогда, стоит вообще забыть это слово - inline
Нет. Включаем ту оптимизацию кода которая делает то что нужно с инлайнами.
Про gcc можно здесь посмотреть: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
05.09.2011, 20:32  [ТС]     подставляемые функции #12
Enfernuz,
Можно делать __forceinline (в VC++) или __inline__ (в GCC), но смысл? )
Да я просто задание из книги Брюса Эккеля выполнял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 20:39     подставляемые функции
Еще ссылки по теме:

C++ Как будут инициализированы переменные в теле функции и вне тела функции?
Написать две пользовательские функции, эквивалентные стандартной функции strlen C++
C++ Вызов функции внутри другой функции с передачей локальной переменной по ссылке
C++ Различные функции, для которых можно создать массив указателей на функции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,819
Завершенные тесты: 2
05.09.2011, 20:39     подставляемые функции #13
Кстати, у компилятора от VC++ 2008 опция /O2 делает то что нужно.
Yandex
Объявления
05.09.2011, 20:39     подставляемые функции
Ответ Создать тему
Опции темы

Текущее время: 21:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru