Возможность выбора: макрос или функция
От: korzhik Россия  
Дата: 13.04.05 09:37
Оценка: 250 (25)
Здравствуйте,

только что обнаружил возможность выбирать что вызвать: макрос или функцию:
#include <cstdio>

void foo()
{
  printf("function\n");
}

#define foo() printf("macro\n");

int main()
{
  foo();   // print "macro"
  (foo)(); // print "function"

  return 0;
}


также можно обойти знаменитую проблему с макросами min max в windows.h
#include <windows.h> // for macros min/max
#include <algorithm> // for std::min, std::max

int main()
{
    // int n = std::max(2, 3); // если раскомментировать то будет ошибка
    int n = (std::max)(2, 3); // всё нормально
}


приятный момент во всём этом, то что такое поведение соответствует стандарту(16.3/9)
То есть подстановка function-like макроса происходит только если токен следующий непосредственно после имени макроса есть открывающая скобка.

Ну в общем мелочь, а приятно.


ЗЫ
Надеюсь не баян.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.