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

Нелепые define-ы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Суммирование рядов. Оценка машинной точности http://www.cyberforum.ru/cpp-beginners/thread194308.html
Помогите составить программы на C, а то уже третий день маюсь и безрезультатно. Задание 1. Вычислите оценки пределов последовательностей {an}, {bn}, если они существуют, с точностью e =10*masheps и соответствующие порядковые номера N(e ). Изобразите графически характер поведения этих последовательностей. Найдите аналитическим путем истинное значение предела. Задание 2. Выберите любую из...
C++ Упорядочить массив натуральных чисел по неубыванию следующим способом Здравствуйте, помогите с заданием (написать программу) в Microsoft Visual C++ 6.0: Упорядочить массив натуральных чисел по неубыванию следующим способом: 1. сначала числа сортируются по последней цифре 2. затем числа сортируются по предпоследней цифре 3. и т.д. Подсчитать количество умножений, делений, и перестановок элементов массива. http://www.cyberforum.ru/cpp-beginners/thread194307.html
C++ Организация Меню в С++
Привет!!!!!!!!!! Народ подскажите как создать меню в С++ в консольном приложении???
C++ Как получить координаты курсора при нажатии любой кнопки мыши?
Неужели не кто не знает?
C++ массив http://www.cyberforum.ru/cpp-beginners/thread194286.html
Помогите исправить код // #include <iostream> #include <stdlib.h> #include <time.h> #include <C:\text.h> using namespace std;
C++ О 8 ферзях(Без рекурсии) Пытаюсь сделать задачу о 8 ферзях без рекурсии. Сделал набросок, но работает как то криво. В чем проблема? #include <stdlib.h> #include <stdio.h> int board ; void resetQ ( int i , int j ) { for ( int x = 0; x < 8; x++ ) подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
20.11.2010, 17:27     Нелепые define-ы
Эти Define'ы нужны для того, чтобы из них "конструировать" код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void func1 (void)
{
  _TRY_BEGIN
  {
    func2 ()
  }
  _CATCH_ALL
  {
    // Обработка
  }
  _CATCH_END
}
 
void func2 (void)
{
  _RAISE (5)
}
По твоим фрагментам сложно сказать, для чего они нужны, но такое "конструирование" обосновано в том случае, если эти макросы можно переопределить как-нибудь по другому. Например:

C
1
2
3
4
#define _TRY_BEGIN if (setjmp(buff) ==0)
#define _CATCH_ALL else
#define _CATCH_END
#define _RAISE(x) longjmp (buff, x)
В итоге если описанный выше пример программы компилять на Си++, то макросы можно определить так, как написано в самом первом посте, а если на Си - то описать так, как я только что расписал через setjmp. Пример несколько высосал из пальца, просто хотел продемонстрировать, для чего такое используют.

Из макросов, например, в Borland C++ конструируется обработчик событий для класса окна. В тело класса пишется что-то типа:

C++
1
2
3
4
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER (WM_USER, TMessage, WM_OnUserMessage)
MESSAGE_HANDLER (WM_WINDOWPOSCHANGING, TMessage, WM_WindowPosChanging)
END_MESSAGE_MAP (TForm)
и после препроцессирования у нас "сконструируется код"

C++
1
2
3
4
5
6
7
8
9
10
11
// Родилось из BEGIN_MESSAGE_MAP
virtual void __fastcall Dispatch(void *Message) { switch (((PMessage)Message)->Msg) {
 
// Родилось из MESSAGE_HANDLER (WM_USER, TMessage, WM_OnUserMessage)
case 0x0400: WM_OnUserMessage(*((TMessage *)Message)); break;
 
// Родилось из MESSAGE_HANDLER (WM_WINDOWPOSCHANGING, TMessage, WM_WindowPosChanging)
case 0x0600: WM_WindowPosChanging(*((TMessage *)Message)); break;
 
// Родилось из END_MESSAGE_MAP (TForm)
default: TForm::Dispatch(Message); break; } }
 
Текущее время: 09:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru