The CAPI Manifesto

Jacob Carlborg doob at me.com
Fri Oct 21 04:53:26 PDT 2011


On 2011-10-21 10:32, Gor Gyolchanyan wrote:
> That's ALL you can do in C. fill structs and call functions
> (fundamental type manipulation doesn't count).
> My personal research shows the following use cases of C macros (sorted
> by popularity in descending order):
> 1. enum
> 2. alias (most notably, conditionally compiled ones)
> 3. CTFE function
> 4. mixin template
> 5. syntactic alias
> 6. syntactic mixin template

I guess it's quite difficult for a compiler to recognize the differences 
between these use cases.

> only the last 2 out of 6 cannot be translated to D.
> An example of a syntactic alias is this very common piece of C code:
> #ifdef __VERY_VERY_OLD_C_COMPILER__
>      #define CONST
> #else
>      #define CONST const
> #endif
>
> An example of a syntactic mixin template is this piece of code, which
> i never actually saw anywhere (possible only in C99 and C++):
> #define N_TIMES(n) for(int i = 0; i != n; ++i)
>
> The last use case is very rare. The only legitimate example i ever saw
> is in libjpeg, where a macro is used to define function pointers of
> API functions.
> The use case before that is mostly used for portability reasons, which
> is not necessary in D.
> Some non-standard extension encapsulating macros are almost always
> used in C libraries, which can be removed altogether.
>
> The translation can go on regarding the above use cases and the last
> two cases can be evaluated in-line, commented out and warned about for
> manual translation.

Something similar is used in the Boost library for its "foreach" macro.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list