[fpc-devel] MACRO - correct syntax?
Florian Klämpfl
florian at freepascal.org
Sun Feb 25 18:34:21 CET 2018
Am 25.02.2018 um 18:21 schrieb Giuliano Colla:
> Il 25/02/2018 13:55, Florian Klämpfl ha scritto:
>
>>> To limit their use.
>
> Well, just for sake of argument, it appears to me a rather drastic approach.
>
> You may write other similar pages on stackoverflow, telling why Dereferencing is evil, Typecasting
> is evil, or why "Absolute" or the "with" construct are evil. All of them, if misused, can lead to
> unexpected results, with code hard to read, easy to misinterpret, and hard to debug. Nonetheless
> they're part of the language, and, properly used, are useful programmer's tools.
http://www.gnu-pascal.de/gpc/Preprocessor.html, nobody prevents people to run a preprocessor before
FPC gets the code.
>
> Most of the drawbacks of macro arguments can be easily overcome if
> a) The listing of preprocessor output is generated.
... which would be a huge effort in FPC as at the point macro are replaced, everything is already
tokenized, comments etc. are already stripped.
> b) The preprocessor output is provided to the debugger as the actual program source
> None of the two should require a titanic effort!
So why is it still a problem for C programmers?
>
> IMHO macro arguments, if properly used, may be a valid additional programmer tool.
This can be said for a lot of things we do not implement in FPC.
>
> E.g. Converting a C program to Pascal I had:
> C code:
>
> #define EXCH_INITIALIZER(nam) \
> {NULL,NULL,NULL,NULL,NULL,PTHREAD_MUTEX_INITIALIZER,nam}
> ....
> EXCHANGE_DESCRIPTOR cp_ready_ex = EXCH_INITIALIZER("CP_RDY");
>
>
> Lacking macro arguments, the equivalent declaration in fpc became:
>
> cp_ready_ex: exchange_descriptor = (
> message_head : Nil;
> message_tail : Nil;
> task_head : Nil;
> task_tail : Nil;
> exchange_link : Nil;
> mutex : (__m_reserved: 0; __m_count: 0; __m_owner: Nil;__m_kind: 0;__m_lock: (__status: 0;__spinlock:0));
> name: ' CP_RDY';);
>
> (and I had quite a number of them!)
> A lot of error prone typing, just to provide the only useful information, i.e. the readable name of
> the thing.
For every language feature some rare use case can be found.
More information about the fpc-devel
mailing list