Четверг, 21 Ноября 2024, 22:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Можно ли заменить использование функций?
ertyuoДата: Воскресенье, 10 Января 2010, 19:20 | Сообщение # 1
уже был
Сейчас нет на сайте
Почему-то раньше не всплывал вопрос о директивах, но в статье про define написали о необычном использовании define, как функции:
Code
#define WWW (w) (w*w)

Может из-за того, что нельзя передавать больше одного параметра (или можно...)? Или существуют другие причины, почему функции появляются в программах, а не макросы define.
WXZRWДата: Понедельник, 11 Января 2010, 02:12 | Сообщение # 2
Thousand faces conspiration
Сейчас нет на сайте
Quote (ertyuo)
необычном использовании define, как функции

Это довольно часто используют вобщем-то.

Quote (ertyuo)
нельзя передавать больше одного параметра (или можно...)?

Можно, вот например :

Code
#define clamp(param, min, max) (((param) > (max)) ? (max) : (((param) < (min)) ? (min) : (param)));

Quote (ertyuo)
Или существуют другие причины, почему функции появляются в программах, а не макросы define.

В чем смысл пихать весь код функций в define? Вообще можно туда и большие функции заносить, но незачем. Обычно define используется для небольшой части кода которая используется часто и во многих частях программы, заносить в define все функции это извращение.

ertyuoДата: Понедельник, 11 Января 2010, 18:21 | Сообщение # 3
уже был
Сейчас нет на сайте
Quote (WXZRW)
В чем смысл пихать весь код функций в define? Вообще можно туда и большие функции заносить, но незачем. Обычно define используется для небольшой части кода которая используется часто и во многих частях программы, заносить в define все функции это извращение.

Да не, все функции заносить и не собирался, а только те, где используется 1-2 оператора. Ведь даже прототип функций занимает больше места, соответственно макросы define будут читабельные в программе. Тем более если можно передавать больше одного параметра, то вообще отлично.
Останется только не допускать ошибок со скобками, что бы не произошло различных коллизий.
PesetsДата: Понедельник, 11 Января 2010, 20:00 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Code
#include <stdio.h>

#define max(a,b) ((a>b)?a:b)

int main()
{
   int i=2,j=3;
   printf("i=%d, j=%d\n",i,j);
   if (max(i++,j++)==i)
   {
    printf("max(i++,j++)=%d\n",i);
   }
   else
   {
    printf("max(i++,j++)=%d\n",j);
   }
   return 0;
}

Выдаст:
i=2, j=3
max(i++,j++)=5

Весело, правда?) И это не единственная причина, почему так, как ты предложил, не делают.
Если хочешь, чтобы вместо функции у тебя просто подставлялось значение, просто объявляй функцию с префиксом "inline" или "__forceinline"





Сообщение отредактировал Pesets - Понедельник, 11 Января 2010, 20:01
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг