Am 16.05.2011 02:30, schrieb Joerg Schuelke: > Am Sun, 15 May 2011 13:26:03 +0200 (CEST) > schrieb Daniƫl Mantione <daniel.manti...@freepascal.org>: > >> Feel free to come up with examples and convince us. They need to be >> examples of code that is much more awkward to write without macro's. > > We extend the small enumeration example: > > Think of it, as a server program with a lot of callback procedures and > associated data > > procedure cb_proc1();begin ... end; > procedure cb_proc2();begin ... end; > procedure cb_proc3();begin ... end; > procedure cb_proc4();begin ... end; > procedure cb_proc5();begin ... end; > procedure cb_proc6();begin ... end; > > type > callenum=( > proc1, > proc2, > proc3, > proc4, > proc5, > proc6 > ); > > callproc=procedure(); > inforec=record > id:callenum;name:string[12];address:callproc > end; > > const > infoarr:array[callenum] of inforec={ > {id:proc1;name:'proc1';address:@cb_proc1}, > {id:proc2;name:'proc2';address:@cb_proc2}, > {id:proc3;name:'proc3';address:@cb_proc3}, > {id:proc4;name:'proc4';address:@cb_proc4}, > {id:proc5;name:'proc5';address:@cb_proc5}, > {id:proc6;name:'proc6';address:@cb_proc6} > } > > What I possibly would do is: > > {$Makro entry(n):={id:proc %% %n%; // concat with parameter > name:'proc' %% % %n%; // concat with str par > address:@cb_proc %% %n% // concat with parameter > } > } > > used with the explicit syntax: > > infoarr:array[1..6] of inforec={ > {$Expand entry(1)}, > {$Expand entry(2)}, > {$Expand entry(3)}, > {$Expand entry(4)}, > {$Expand entry(5)}, > {$Expand entry(6)}, > } > > thats nice enough if you have 57 elements in your callenum. Would you > say then, use an IDE instead of? Every time I change the inforec, which > is possibly not that seldom, I only change the macro once. Is this not > nice? Macros simply can help to keep the things together.
You still need to keep infoarr and callenum in sync so "simple" macros are only half of a solution in this case. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel