[fpc-devel] Macro Processing

Martin fpc at mfriebe.de
Mon May 16 15:36:29 CEST 2011

On 16/05/2011 01:30, Joerg Schuelke wrote:
> 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
>                    }
> }
And that is exactly where macro turn into red hot iron.

The same could be used to say define a procedure, and the name of the 
procedure would be the result of some concatenation.
Or define a macro the name of which is the result of some operation....

I have seen that in C, macros generating macros.

As the result, even if you knew you where looking at a macro, you had no 
way to find where it was declared. Because the declaration did not 
contain it's name (but concatenated it from many pieces).
Search for the full name => the declaration is not found.

With the above, you could at least define procedures, that can not be 
found by search.

And over time it will happen. With macro support like this, people start 
building there macro-libraries. And eventually end up with things they 
never even intended themself.

More information about the fpc-devel mailing list