![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
День добрый.
Нужно стандартные ф-ции, типа:
Реализовать в виде макроса. Сама реализация понятна, но как вернуть значение ?
Что вернет return ? -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Daevaorn: Примерчик можно...
Есть еще мнения? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
при использовании макроса будет построена следуюшая комбинация
// то есть построится тело функции , а это совсем не то что вы хотели // хотя что именно хотели получить , не понятно // если функцию стравнения для любого типа (то непонятно тогда почему название strcmp)- то смотреть в сторону шаблона // если функцию для сравнения строк то #define там не нужен |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
макрос должен представлять выражение, имеющее значение. естественно, никаких return
как-то так:
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
mes: Что получиться я заню, от этого и вопрос - Как из тела функции в виде макроса, получить результат ???
Добавлено через 4 минуты и 40 секунд baldina: Спасибо. Щас буду тестить. По идее такая реализация строковых функций должна работать быстрее стандартной. А какие подводные камни появятся...? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
про выражение написал, а значения не показал
не получится тут "вернуть", нужен параметр макроса для результата Добавлено через 4 минуты и 45 секунд
отнюдь. стандартная на ассемблере написана если надо избежать накладные расходы на вызов функции, используй inline кстати, современные компиляторы умеют в режиме оптимизации встраивать такие функции как strcmp, strcpy, pow, sqrt, sin и т.п. (intrinsic functions) |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Знаю про это. Но практика показывает, что это не всегда происходит. И не понятно от чего и почему... -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
макросы для этих целей использовать нельзя, это дурной тон. Как уже было сказано, компилятор в состоянии сам определить, где требуется функцию вызвать а где ее лучше встроить. В случае использования макросов таким вот образом, страдает ясность кода, большинство IDE не смогут сделать подсказку для макроса, статические анализаторы кода то-же отдыхают. К тому-же, возможны тяжело обнаруживаемые ошибки. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не использовать слово return, например #define test(dst, src) ( !src || !*src || !dst ) ? src : dst но в любом случае не понятна цель - если для скорости - то такой путь заблуждение |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
это происходит, для того, что-бы уменьшить объем кода. там где это может дать увеличение производительности, например в цикле, встраивание происходит. если функция вызывается всего один раз, то экономить пару наносекунд тратящихся на ее вызов нет смысла |
|||
|
||||
| andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
mes: Да, для скорости...
Так как большие изменения в программу вносить не хочется. Это один из простых способов. Добавлено @ 15:24 Вот что я сделал:
Гну препроцессор сотворяет вот что:
Но почему-то res = 84, а не 0. Первый недостаток макросов - хрен отладишь!!! А...вот опечатка: while (*s1 && (res=*s2++-*s1++)==0); Это сообщение отредактировал(а) andrew_121 - 8.6.2008, 15:33 -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
в GCC решение такое
в коде ядра Linux данное расширение широко используется Это сообщение отредактировал(а) MAKCim - 8.6.2008, 15:34 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
MAKCim Т.е. запись вида:
Будет трактоваться как:
В зависимости от результата...? -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
да, только, наверное, макрос должен называться strcpy, а не strcmp Это сообщение отредактировал(а) MAKCim - 8.6.2008, 15:40 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Всем Благодарен.
В особености baldina и MAKCim. Добавлено через 2 минуты и 28 секунд
Пардон...я заметил позже... Но не стал изменять название функции. P.S. Ты единственный кто заметил -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Хотя...это гибрид какой-то...
Суть не в этом. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |