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

Директива препроцессора в несколько строк - C++

Восстановить пароль Регистрация
 
Shaman163
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 134
23.12.2013, 15:48     Директива препроцессора в несколько строк #1
Подскажите пожалуйста как за дефайнить такую вот функцию
C++
1
2
3
4
5
    float Cosine(float a, float b, float value)
    {
        value = (1 - cos(value * F_PI)) * 0.5f;
        return a * (1 - value) + b * value;
    }
не могу разобраться как записать эту операцию в одно выражение..
мои тщетные попытки увенчались провалом. :<
C++
1
#define Cosine(a, b, value) (value = (1 - cos(value * F_PI)) * 0.5f; a * (1 - value) + b * value;)
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2013, 15:48     Директива препроцессора в несколько строк
Посмотрите здесь:

директива препроцессора C++
как удалять несколько символов сразу из строк? C++
Вывести несколько строк в файл C++
C++ Функция изменяющая сразу несколько строк
C++ Директива препроцессора #if
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Arigato
Программист
 Аватар для Arigato
278 / 175 / 94
Регистрация: 05.12.2013
Сообщений: 568
Записей в блоге: 5
23.12.2013, 15:59     Директива препроцессора в несколько строк #2
Я бы так сделал:
C++
1
2
#define VALUE(v) (1-cos((v)*F_PI))*0.5f
#define COSINE(a,b,v) (a)+(VALUE(v))*((b)-(a))
Второе выражение я преобразовал к виду: a+value(b-a), чтобы избавиться от повторяющегося value. При желании можно объединить две директивы в одну, просто вместо VALUE(v) записав выражение из директивы выше.
Shaman163
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 134
23.12.2013, 16:07  [ТС]     Директива препроцессора в несколько строк #3
Спасибо конечно, но не очень то помогло.. Мне нужен именно 1 дефайн. Поэтому собственно и спросил..
Все эти извращения проворачиваю исключительно в угоду оптимизации, а в случае повторного вызова выражения " (1-cos((v)*F_PI))*0.5f " оно будет работать ещё медленнее чем через вызов функции.. :<
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
23.12.2013, 16:27     Директива препроцессора в несколько строк #4
C
1
2
#define Cosine(a, b, value) \
    ((value = 0.5f * (1 - cos(value * F_PI))), (a) * (1 - value) + b * value)
По идее.
http://lmgtfy.com/?q=c%2B%2B+comma+separated+operators

Добавлено через 8 минут
Цитата Сообщение от Shaman163 Посмотреть сообщение
Все эти извращения проворачиваю исключительно в угоду оптимизации
C++
1
2
3
4
5
void Cosine(const float &a, const float &b, float &result) 
{
    value = (1 - cos(value * 3.14159265)) * 0.5f;
    value = a * (1 - value) + b * value;
}
Warezovvv
 Аватар для Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
23.12.2013, 16:28     Директива препроцессора в несколько строк #5
Зачем в c++ что то дефайнить? Это же c++ а не c (плохой тон,господа). Используй в тупую вызов своей функции.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
23.12.2013, 16:29     Директива препроцессора в несколько строк #6
Shaman163, Да, кстати, поиграйся с флагами оптимизации, сейчас компиляторы многое умеют, так что функция может пахать реже дефайна.
Shaman163
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 134
23.12.2013, 16:39  [ТС]     Директива препроцессора в несколько строк #7
Цитата Сообщение от Warezovvv Посмотреть сообщение
Это же c++ а не c
Видимо я просто ещё слишком зелен, чтобы знать такие штуки
Дефайнить показалось логичным, ибо на ООП не будет затрачен ресурс..
outoftime, Как же мне по вашему гуглить? если я не знал что загуглить..
За ответ большущее спасибо.
Warezovvv
 Аватар для Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
23.12.2013, 16:43     Директива препроцессора в несколько строк #8
Цитата Сообщение от Shaman163 Посмотреть сообщение
Видимо я просто ещё слишком зелен, чтобы знать такие штуки
Дефайнить показалось логичным, ибо на ООП не будет затрачен ресурс..
outoftime, Как же мне по вашему гуглить? если я не знал что загуглить..
За ответ большущее спасибо.
вместо дефайн давно есть inline функции.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
23.12.2013, 16:45     Директива препроцессора в несколько строк #9
Shaman163, http://mmcs.sfedu.ru/~ulysses/IT/C++/using_gcc.html раздел "Оптимизация" флаг -O3
Наиболее «агрессивная» оптимизация, включаются развертку циклов и автоматическое встраивание функций.

Искать "флаги оптимизации" и их описание
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2013, 18:35     Директива препроцессора в несколько строк
Еще ссылки по теме:

Разделить исходную строку на несколько строк длины K C++
C++ Директива препроцессора pragma
C++ Несколько ошибок при обработке строк

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

Или воспользуйтесь поиском по форуму:
Arigato
Программист
 Аватар для Arigato
278 / 175 / 94
Регистрация: 05.12.2013
Сообщений: 568
Записей в блоге: 5
23.12.2013, 18:35     Директива препроцессора в несколько строк #10
Цитата Сообщение от Shaman163 Посмотреть сообщение
Мне нужен именно 1 дефайн.
Так я вам объяснил, как их в один объединить:

C++
1
#define COSINE(a,b,v) (a)+((1-cos((v)*F_PI))*0.5f)*((b)-(a))
Добавлено через 1 минуту
Цитата Сообщение от Shaman163 Посмотреть сообщение
а в случае повторного вызова выражения " (1-cos((v)*F_PI))*0.5f " оно будет работать ещё медленнее чем через вызов функции
Вы вообще читали мои пояснения? Никакого повторного вызова не будет, потому как ваше выражение сводится к a+value*(b-a).
Yandex
Объявления
23.12.2013, 18:35     Директива препроцессора в несколько строк
Ответ Создать тему
Опции темы

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