On Wed, 06 Jul 2011 16:21:31 +0200, Trass3r wrote: > Am 06.07.2011, 16:15 Uhr, schrieb teo <teo.ubu...@yahoo.com>: > >> What is the best way to translate following to D? >> >> #define MAKELONG(a, b) \ >> ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16)) >> >> The point is I would like to be able to use that at compile-time. The >> macro is supposed to define some constants. > > Just turn it into a function. > If you assign it to an enum or use it as an initializer for global > immutables it should be evaluated at compile-time.
Thank you. That did the trick. However I am facing another problem: There is a macro, which obtains the size of a type #define TYPESIZE(t) (sizeof(t)) Example: printf("%ld\n", TYPESIZE(short)); printf("%ld\n", TYPESIZE(struct A)); The TYPESIZE macro is used within another macro which defines constants. #define M(a,b,size) \ ((a) << SHIFT_A) | \ ((b) << SHIFT_B) | \ ((size) << SHIFT_SIZE)) #define MM(a,b,type) M((a),(b),(TYPESIZE(type))) Example: #define C1 MM(1, 2, struct A) #define C2 MM(3, 4, struct B) How can I translate that to D?