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. Again: The point is not, to find an example, which is not doable without macros. The point is, to show that the concept of automated text changing is useful. Regards Jörg _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel