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

Использование inline функций - C++

Восстановить пароль Регистрация
 
Sara1995
3 / 3 / 0
Регистрация: 03.10.2012
Сообщений: 66
16.12.2013, 22:06     Использование inline функций #1
Нам задали написать программу по условию: Написать программу с использованием подставляемых функций и обычных функций, выполняющих одни и те же действия. С помощью системного таймера определить выигрыш во времени при использовании inline -функций.
Помогите пожалуйста доделать программу под условие.
В литературе нашли такой код, но не работает, видимо неверно написан:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
int maxo(int x, int y)
{
    return(x>y)?x:y;
}
inline int maxi(int x, int y)
{
    return(x>y)?x:y;
}
int main()
{
    int i,j=5000,k, loop; // Непосредственное вычисление 
    for(loop=0;loop<100;loop++)
    {
        for(i=0;i<10000;i++)
        {
            k=(i>j)?i:j;
        }
    }
    // Подставляемая функция 
    printf("Подставляемая функция\n\n"); for(loop=0;loop<100;loop++)
    {
        for(i=0;i<10000;i++);
        k=maxi(i,j);}
}
//Неподставляемая функция 
printf("Обычная функция\n\n"); for(loop=0;loop<100;loop++)
{
    for(i=0;i<10000;i++)
    {k=maxo(i,j);
    }
}
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
16.12.2013, 22:20     Использование inline функций #2
А что значит не работает? Если время одинаковое (хотя замеров я не заметил), так это оттого, что циклы маленькие, смело ставь десяток миллионов на десяток миллионов. А так замерить можно:
C++
1
2
3
    ULONGLONG lastCall = GetTickCount64();
       //действие
       cout << GetTickCount64()-lastCall << endl; //прошло времени
Кликните здесь для просмотра всего текста
А вообще нечего в литературе такую элементарщину искать, лучше самому догадаться, иначе дальше будет бедаааа...
Sara1995
3 / 3 / 0
Регистрация: 03.10.2012
Сообщений: 66
16.12.2013, 22:33  [ТС]     Использование inline функций #3
Это понятно, но выдаются ошибки в коде, нужно исправить.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.12.2013, 22:35     Использование inline функций #4
со скобками фигурными вокруг функции main разберись
а точнее, с циклом фор на строке 23 убери точку с запятой
и разберись со скобками
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
16.12.2013, 22:42     Использование inline функций #5
А вообще ошибки покажите. Чего мы искать их тут будем, если можно просто лог дать...
Sara1995
3 / 3 / 0
Регистрация: 03.10.2012
Сообщений: 66
16.12.2013, 22:51  [ТС]     Использование inline функций #6
Вот отредактировала теперь запускается, только вот мне само условие непонятно, как программа должна работать и где таймер должен размещаться в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
#include<stdio.h>
int maxo(int x, int y)
{
    return(x>y)?x:y;
}
inline int maxi(int x, int y)
{
    return(x>y)?x:y;
}
int main()
{
    int i,j=5000,k, loop; // Непосредственное вычисление 
    for(loop=0;loop<100;loop++)
    {
        for(i=0;i<10000;i++)
        {
            k=(i>j)?i:j;
        }
    }
    // Подставляемая функция 
    setlocale(LC_ALL, "Russian");
    printf("Подставляемая функция\n\n"); 
    {
    for(loop=0;loop<100;loop++)
    {
        for(i=0;i<10000;i++);
        k=maxi(i,j);}
}
//Неподставляемая функция 
printf("Обычная функция\n\n"); for(loop=0;loop<100;loop++)
{
    for(i=0;i<10000;i++)
    {k=maxo(i,j);
    }
}
system("pause");
return 0;
}
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
17.12.2013, 14:29     Использование inline функций #7
Как это где размещаться. Я ж конкретно написал:
Цитата Сообщение от monolit Посмотреть сообщение
ULONGLONG lastCall = GetTickCount64();
* * * *//действие
* * * *cout << GetTickCount64()-lastCall << endl; //прошло времени
Действие - то, что ты замеряешь. А ты замеряешь сколько времени потратится на циклы, вот циклы твои и подставляй - у тебя их три (не считая внутренних)

Добавлено через 2 минуты
А со скобками ты так и не разобралась, насколько я вижу...
Цитата Сообщение от Sara1995 Посмотреть сообщение
printf("Подставляемая функция\n\n");
* * {
* * for(loop=0;loop<100;loop++)
* * {
* * * * for(i=0;i<10000;i++);
* * * * k=maxi(i,j);}
}
Вообще чушь. Так надо:
C++
1
2
3
4
5
6
7
printf("Подставляемая функция\n\n"); 
for(loop=0;loop<100;loop++)
{
* * for(i=0;i<10000;i++) {
* * * * k=maxi(i,j);
    }
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
17.12.2013, 16:08     Использование inline функций #8
Цитата Сообщение от Sara1995 Посмотреть сообщение
С помощью системного таймера определить выигрыш во времени при использовании inline -функций
На всякий случай скажу сразу, что выигрыша никакого скорее всего не будет. Т.к. современные компиляторы настолько продвинутые, что им по большому счёту плевать, есть модификатор inline, или нет. Они (компиляторы) сами, никого не спрашивая, выполнят inline. Разницу, как правило, можно увидеть, используя компиляторы 20-25-летней давности, когда они ещё не были настолько умными
Sara1995
3 / 3 / 0
Регистрация: 03.10.2012
Сообщений: 66
17.12.2013, 22:02  [ТС]     Использование inline функций #9
monolit, Для добавления таймера наверное нужно какой-то заголовочный файл подключать, покажите в самом коде как должно выглядеть или хотя бы пример, я просто в первый раз сталкиваюсь с таким, в интернете искала теорию, но там совсем другое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 22:09     Использование inline функций
Еще ссылки по теме:

C++ Использование функций и шаблонов функций
C++ Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline?
Схож ли по принципу механизм использования inline функций и макросов? C++

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

Или воспользуйтесь поиском по форуму:
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
17.12.2013, 22:09     Использование inline функций #10
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
 
/***************/
 
printf("Подставляемая функция\n\n"); 
ULONGLONG lastCall = GetTickCount64();
for(i=0; i<10000000; i++) {
    k=maxi(i,j);
}
cout << "Прошло " << GetTickCount64()-lastCall << "ms." << endl
Yandex
Объявления
17.12.2013, 22:09     Использование inline функций
Ответ Создать тему
Опции темы

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