On Thursday, 12 May 2016 at 22:51:17 UTC, Andrew Edwards wrote:
The following preprocessor directives are frequently
encountered in C code, providing a default constant value where
the user of the code has not specified one:
#ifndef MIN
#define MIN 99
#endif
#ifndef MAX
#define MAX 999
#endif
I'm at a loss at how to properly convert it to D. I've tried
the following:
enum MIN = 0;
static if(MIN <= 0)
{
MIN = 99;
}
it works as long as the static if is enclosed in a static
this(), otherwise the compiler complains:
mo.d(493): Error: no identifier for declarator MIN
mo.d(493): Error: declaration expected, not '='
This however, does not feel like the right way to do thinks but
I cannot find any documentation that provides an alternative.
Is there a better way to do this?
Thanks,
Andrew
One thing you could try is compile the C code without the
#ifndef's and see if it compiles without issues. If it does,
simply use a D enum and don't worry about translating the
#ifndef's.
(Alternately check the C code to see if there really are
differing definitions of MIN/MAX -- if there are, then the code
is already messed up and you need to implement your D code taking
into consideration the implications of that -- maybe use
different variable names in each section of the code for the
MIN/MAX that takes the different MIN/MAX values. I've typically
seen this kind of ifdef'ing to quick-fix compile issues in new
code without having to rewrite a whole bunch of existing code or
code-structure and it is never to have differing values for the
defines -- if differing values are used with the same name, then
the code is bad and it's best to cleanup as you migrate to D.)