home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 March
/
Chip_2002-03_cd1.bin
/
chplus
/
cecko
/
CPP
/
MAKRA.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1998-10-05
|
1KB
|
30 lines
// P⌐íklad: Programování v C++ na FJFI - ÇVUT
#pragma hdrfile="TCDEF.SYM" // pro urychlení p⌐ekladu
#include <iostream.h>
#include <conio.h>
#define N 100
#define sqr(x) x*x
#define sqr2(x) (x)*(x)
#define sqr3(x) ((x)*(x))
#define RET return 0;
int main() {
const int M=10; // i tak lze definovat konstantu
int d=5;
for(int i=0;i<N;i++) {cout << i << " ";}
cout << endl << endl << sqr(5) << endl; //správnê se vypí¿e 25
cout << sqr(5+1) << endl; //¿patnê se vypí¿e 11, dûvod, makro se p⌐eloæí takto: 5+1*5+1 = 11
cout << sqr2(5+1) << endl; //jiæ správnê vypí¿e 36, problém se vy⌐e¿il p⌐idáním závorek
cout << sqr2(sqr2(3)) << endl; //správnê vypí¿e 81
cout << "Stisknête 2x klávesu." << endl;
cout << sqr2(getch()) << endl; //zde se bude vyhodnocovat dvakrát getchar() - to si také nep⌐ejeme
d=5;
cout << sqr2(d++) << endl; //zde selhává i druhé makro sqr2, dûvod 5*(potom se zvÿ¿í na 6)6 = 30
d=5;
cout << sqr2(++d) << endl; //p⌐eklad jako (++d)*(++d), zde také selhává, dûvod 6*7=42
d=5;
cout << sqr3(d++) << endl; //ani definováním nového makra se tento problém nevy⌐e¿í
d=5;
cout << sqr3(++d) << endl; //ani zde nedostaneme oçekávanÿ vÿsledek
RET
}