короче, я решил продолжить преподачу
специально для людей, которые не любят шаблоны, обожают препроцессор, считают, что язык ограничивается синтаксисом, что компилятор сводится к парсеру, что с компилируется с линейной скоростью, а с++ - с нулевой
Код:
[18:47:19 pal@localhost ~/tmp/4]$ cat d.cpp
#include <iostream>
#include <cstdlib>
int main ( int argc, const char * * argv ) {
int n = 5;
if ( argc == 2 )
n = std :: atoi ( argv [ 1 ] );
std :: cout << "#include <stdio.h>\n"
"#define xstr(s) str(s)\n"
"#define str(s) #s\n"
"#define F0 0\n";
for ( int i = 1; i <= n; i ++ )
std :: cout << "#define F" << i << " F" << i - 1 << "+F" << i - 1 << '\n';
std :: cout << "int main ( ) {\n"
" const char * a = xstr(F" << n <<");\n"
" puts ( a );\n"
" return 0;\n"
"}\n";
}
g++ -o d d.cpp
Код:
[18:45:35 pal@localhost ~/tmp/4]$ for i in `seq 10 100`; do ./d $i > t$i.c && echo $i && time gcc t$i.c -o t$i; done
10
real 0m0.100s
user 0m0.032s
sys 0m0.019s
11
real 0m0.072s
user 0m0.041s
sys 0m0.018s
12
real 0m0.099s
user 0m0.031s
sys 0m0.024s
13
real 0m0.099s
user 0m0.039s
sys 0m0.024s
14
real 0m0.099s
user 0m0.043s
sys 0m0.031s
15
real 0m0.116s
user 0m0.060s
sys 0m0.021s
16
real 0m0.168s
user 0m0.065s
sys 0m0.042s
17
real 0m0.221s
user 0m0.102s
sys 0m0.055s
18
real 0m0.339s
user 0m0.191s
sys 0m0.082s
19
real 0m0.630s
user 0m0.343s
sys 0m0.137s
20
real 0m1.276s
user 0m0.611s
sys 0m0.295s
21
real 0m2.609s
user 0m1.207s
sys 0m0.610s
22
real 0m4.603s
user 0m2.410s
sys 0m1.183s
23
real 0m9.249s
user 0m4.674s
sys 0m2.305s
24
^C
real 0m26.975s
user 0m0.000s
sys 0m0.004s
последнее ушло в дикий свопомет на 4г, пришлось прибивать
Код:
[18:59:34 pal@localhost ~/tmp/4]$ ls -l t*
-rwxrwxr-x 1 pal pal 9063 Май 6 18:45 t10
-rw-rw-r-- 1 pal pal 314 Май 6 18:45 t10.c
-rwxrwxr-x 1 pal pal 10743 Май 6 18:45 t11
-rw-rw-r-- 1 pal pal 334 Май 6 18:45 t11.c
-rwxrwxr-x 1 pal pal 14839 Май 6 18:45 t12
-rw-rw-r-- 1 pal pal 354 Май 6 18:45 t12.c
-rwxrwxr-x 1 pal pal 23031 Май 6 18:45 t13
-rw-rw-r-- 1 pal pal 374 Май 6 18:45 t13.c
-rwxrwxr-x 1 pal pal 39415 Май 6 18:45 t14
-rw-rw-r-- 1 pal pal 394 Май 6 18:45 t14.c
-rwxrwxr-x 1 pal pal 72183 Май 6 18:45 t15
-rw-rw-r-- 1 pal pal 414 Май 6 18:45 t15.c
-rwxrwxr-x 1 pal pal 137719 Май 6 18:45 t16
-rw-rw-r-- 1 pal pal 434 Май 6 18:45 t16.c
-rwxrwxr-x 1 pal pal 268791 Май 6 18:45 t17
-rw-rw-r-- 1 pal pal 454 Май 6 18:45 t17.c
-rwxrwxr-x 1 pal pal 530935 Май 6 18:45 t18
-rw-rw-r-- 1 pal pal 474 Май 6 18:45 t18.c
-rwxrwxr-x 1 pal pal 1055223 Май 6 18:45 t19
-rw-rw-r-- 1 pal pal 494 Май 6 18:45 t19.c
-rwxrwxr-x 1 pal pal 2103799 Май 6 18:45 t20
-rw-rw-r-- 1 pal pal 514 Май 6 18:45 t20.c
-rwxrwxr-x 1 pal pal 4200951 Май 6 18:45 t21
-rw-rw-r-- 1 pal pal 534 Май 6 18:45 t21.c
-rwxrwxr-x 1 pal pal 8395255 Май 6 18:45 t22
-rw-rw-r-- 1 pal pal 554 Май 6 18:45 t22.c
-rwxrwxr-x 1 pal pal 16783863 Май 6 18:46 t23
-rw-rw-r-- 1 pal pal 574 Май 6 18:45 t23.c
-rw-rw-r-- 1 pal pal 594 Май 6 18:46 t24.c
Код:
[19:05:01 pal@localhost ~/tmp/4]$ cat t24.c
#include <stdio.h>
#define xstr(s) str(s)
#define str(s) #s
#define F0 0
#define F1 F0+F0
#define F2 F1+F1
#define F3 F2+F2
#define F4 F3+F3
#define F5 F4+F4
#define F6 F5+F5
#define F7 F6+F6
#define F8 F7+F7
#define F9 F8+F8
#define F10 F9+F9
#define F11 F10+F10
#define F12 F11+F11
#define F13 F12+F12
#define F14 F13+F13
#define F15 F14+F14
#define F16 F15+F15
#define F17 F16+F16
#define F18 F17+F17
#define F19 F18+F18
#define F20 F19+F19
#define F21 F20+F20
#define F22 F21+F21
#define F23 F22+F22
#define F24 F23+F23
int main ( ) {
const char * a = xstr(F24);
puts ( a );
return 0;
}
Социальные закладки