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

"Циклы" на препроцессоре - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Копировать код http://www.cyberforum.ru/cpp/thread899514.html
как из MS Word или блокнота скопировать и вставить в программу Тurbo C++ код. обычным способом не получается, то есть ctrl+c и ctrl+v или shift+ins??
C++ Десять возможностей C++11, которые должен использовать каждый C++ разработчик Обсуждаем статью: http://habrahabr.ru/post/182920/ Надо же этот раздел немного оживить :) Я, естественно, не участвую. ^_^ http://www.cyberforum.ru/cpp/thread899038.html
разница C++
Доброе время суток, я не давно начал изучать С++. Есть разница писать на eclipse и писать на visual studio 2010? Заранее спасибо, прошу не смейтесь, я новичок:)
C++ Лямбда не допускает auto
Всем привет! Имеем код: #include <iostream> #include <vector> #include <algorithm> #include <numeric> int main()
C++ Скомпилится ли код, написанный, с g++ 4.6.3 на компиляторе версии 4.7.1? http://www.cyberforum.ru/cpp/thread888772.html
Если я пишу код с 4.6.3, он может не скомпилиться на 4.7 ? Или там есть обратная поддержка? Отмечу, что опции компиляции будут g++ -std=c++11 -Wall -Werror -pedantic-errors Добавлено через 6...
C++ treeView Visual studio помогите с записью в файл ! есть такие классы и методы template<typename T,typename Tl> class Buss { public: T buss_number; // номер автобуса T path_number; // номер маршрута Tl... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27

"Циклы" на препроцессоре - C++

13.06.2013, 16:53. Просмотров 3106. Ответов 13
Метки (Все метки)

Хотелось данную информацию включить в блог, но пока не понимаю, как это аккуратно сделать. А потому просто тему помещу на форум, а в блоге воткну ссылку

Недавно услышал от студентов, что на препроцессоре можно писать циклы. Понимание того, как работает препроцессор, говорит мне о том, что через препроцессор циклы создавать невозможно. Но на всякий случай полез искать в гугл. Оказалось, что речь идёт о boost'овом разделе boost/preprocessor/iteration. Наподобие этого: http://www.boost.org/doc/libs/1_53_0...l_iterate.html

В реальности никаких циклов на препроцессоре не строится. У boost'а в этом месте очень глубокие и разветвлённые кишки, но я продемонстрирую на коротком примере общий принцип построения этого раздела boost'а. После чего станет понятно, что в реальности никаких циклов нет, а то, что есть, имеет весьма жёсткие ограничения

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* Заголовочный файл myboost_iterate.h, иммитирующий boost'овый цикл */
 
#if 0 >= MYBOOST_LOOP_MIN && 0 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(0)
#endif
 
#if 1 >= MYBOOST_LOOP_MIN && 1 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(1)
#endif
 
#if 2 >= MYBOOST_LOOP_MIN && 2 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(2)
#endif
 
#if 3 >= MYBOOST_LOOP_MIN && 3 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(3)
#endif
 
#if 4 >= MYBOOST_LOOP_MIN && 4 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(4)
#endif
 
#if 5 >= MYBOOST_LOOP_MIN && 5 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(5)
#endif
 
#if 6 >= MYBOOST_LOOP_MIN && 6 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(6)
#endif
 
#if 7 >= MYBOOST_LOOP_MIN && 7 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(7)
#endif
 
#if 8 >= MYBOOST_LOOP_MIN && 8 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(8)
#endif
 
#if 9 >= MYBOOST_LOOP_MIN && 19<= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(9)
#endif
 
#if 10 >= MYBOOST_LOOP_MIN && 10 <= MYBOOST_LOOP_MAX
MYBOOST_LOOP_BODY(10)
#endif
Теперь в данном коде мы как будто бы имеем цикл от 4 до 8

C
1
2
3
4
5
#define MYBOOST_LOOP_MIN 4
#define MYBOOST_LOOP_MAX 8
#define MYBOOST_LOOP_BODY(n) \
  int a##n = n;
#include "myboost_iterate.h"
после препроцессора получим на выходе (пустые строки я выкинул, чтобы глаза не резало):

C
1
2
3
4
5
int a4 = 4;
int a5 = 5;
int a6 = 6;
int a7 = 7;
int a8 = 8;
В своём примере я ограничился допустимыми значениями "цикловой переменной" от 0 до 10. В той версии boost'а, в которой я ковырялся, этот диапазон был от 0 до 256. Т.е. имело место быть 257-кратное повторение похожих фрагментов, что и создаёт иллюзию циклов
9
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru