Если вы хотите углубиться в программирование препроцессора, я могу рекомендовать только библиотеку Boost.Preprocessor в качестве строительного блока, вам не придется переписывать вещи с нуля.
ДляНапример, чтобы создать вашу таблицу, я бы использовал ( ideone ):
#include <iostream>
#include <boost/preprocessor/repetition/enum.hpp>
#define ORDER(z, n, text) n
int main() {
int const a[] = { BOOST_PP_ENUM(100, ORDER, ~) };
std::size_t const n = sizeof(a)/sizeof(int);
std::cout << "count = " << n << "\n";
for(std::size_t i = 0 ; i != n ; ++i )
std::cout << a[i] << "\n";
return 0;
}
И оставил бы все в Boost :): 1010 *
Примечание: это перечисляет от 0 до 99, а не от 1 до 100, есть другие операции, доступные для выполнения арифметики;)
РЕДАКТИРОВАТЬ: Как это работает?
Во-первых, я могу рекомендовать только запись документа для BOOST_PP_ENUM
BOOST_PP_ENUM
- это макрос, который принимает 3 аргумента: (n, MACRO, data)
n
: целое число MACRO
: макрос, принимающий 3 аргумента: (z, i, data)
data
: некоторые данные для вашего удобства будут переданы в macro
Затем он будет заменен на n последовательных вызовов MACRO
, разделенных запятыми:
MACRO(z, 0, data), MACRO(z, 1, data), ... , MACRO(z, n-1, data)
Вам решать, что делатьЕсли вы хотите с вашим MACRO
.
Боюсь, я никогда не использовал аргумент z
, он используется внутри, и теоретически вы можете использовать его для ускорения процесса.