digitalmars.D.learn - Versioned extern?
- Nick Sabalausky (29/29) Jul 23 2011 Is there a way to have a section of code be extern(C) on one OS and
- Brad Roberts (3/37) Jul 23 2011 That specific pair of extern types with that specific set of versions
- =?UTF-8?B?QWxla3NhbmRhciBSdcW+acSNacSH?= (19/48) Jul 29 2011 If I'm not mistaken extern() accepts only Identifier, not expression.
- =?UTF-8?B?QWxla3NhbmRhciBSdcW+acSNacSH?= (4/61) Jul 29 2011 Ouh, haven't read that you don't want code to be mixed-in.. In that
- Nick Sabalausky (7/8) Jul 30 2011 case.. I dunno :)
- Steven Schveighoffer (15/45) Jul 29 2011 does this work?
- Trass3r (1/1) Jul 29 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5739#c3
Is there a way to have a section of code be extern(C) on one OS and extern(Windows) on another OS, without resorting making the code in question a mixin? These doesn't appear to work: ------------------------------ version(Windows) { enum callingConvention = "Windows"; } else { enum callingConvention = "C"; } extern(mixin(callingConvention )) { /+ ...code here... +/ } ------------------------------ version(Windows) { extern(Windows): } else { extern(C): } /+ ...code here... +/ extern(D): ------------------------------
Jul 23 2011
On Saturday, July 23, 2011 8:35:39 PM, Nick Sabalausky wrote:Is there a way to have a section of code be extern(C) on one OS and extern(Windows) on another OS, without resorting making the code in question a mixin? These doesn't appear to work: ------------------------------ version(Windows) { enum callingConvention = "Windows"; } else { enum callingConvention = "C"; } extern(mixin(callingConvention )) { /+ ...code here... +/ } ------------------------------ version(Windows) { extern(Windows): } else { extern(C): } /+ ...code here... +/ extern(D): ------------------------------That specific pair of extern types with that specific set of versions --> extern(System)
Jul 23 2011
If I'm not mistaken extern() accepts only Identifier, not expression. I'm not really sure what's the best way to do that but I belive this should work (haven't tested): enum code =3D q{ void func() { // do something } }; version (Windows) { extern (Windows) { mixin(code); } } else { extern (C) { mixin(code); } } On Sun, Jul 24, 2011 at 5:35 AM, Nick Sabalausky <a a.a> wrote:Is there a way to have a section of code be extern(C) on one OS and extern(Windows) on another OS, without resorting making the code in quest=iona mixin? These doesn't appear to work: ------------------------------ version(Windows) { =C2=A0 =C2=A0enum callingConvention =3D "Windows"; } else { =C2=A0 =C2=A0enum callingConvention =3D "C"; } extern(mixin(callingConvention )) { =C2=A0 =C2=A0/+ ...code here... +/ } ------------------------------ version(Windows) { =C2=A0 =C2=A0extern(Windows): } else { =C2=A0 =C2=A0extern(C): } /+ ...code here... +/ extern(D): ------------------------------
Jul 29 2011
Ouh, haven't read that you don't want code to be mixed-in.. In that case.. I dunno :) 2011/7/29 Aleksandar Ru=C5=BEi=C4=8Di=C4=87 <ruzicic.aleksandar gmail.com>:If I'm not mistaken extern() accepts only Identifier, not expression. I'm not really sure what's the best way to do that but I belive this should work (haven't tested): enum code =3D q{ =C2=A0 void func() { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // do something =C2=A0 } }; version (Windows) { =C2=A0 extern (Windows) { =C2=A0 =C2=A0 =C2=A0 mixin(code); =C2=A0 } } else { =C2=A0 extern (C) { =C2=A0 =C2=A0 =C2=A0 mixin(code); =C2=A0 } } On Sun, Jul 24, 2011 at 5:35 AM, Nick Sabalausky <a a.a> wrote:tionIs there a way to have a section of code be extern(C) on one OS and extern(Windows) on another OS, without resorting making the code in ques=a mixin? These doesn't appear to work: ------------------------------ version(Windows) { =C2=A0 =C2=A0enum callingConvention =3D "Windows"; } else { =C2=A0 =C2=A0enum callingConvention =3D "C"; } extern(mixin(callingConvention )) { =C2=A0 =C2=A0/+ ...code here... +/ } ------------------------------ version(Windows) { =C2=A0 =C2=A0extern(Windows): } else { =C2=A0 =C2=A0extern(C): } /+ ...code here... +/ extern(D): ------------------------------
Jul 29 2011
"Aleksandar Ruzicic" <ruzicic.aleksandar gmail.com> wrote in message news:mailman.1954.1311949602.14074.digitalmars-d-learn puremagic.com...Ouh, haven't read that you don't want code to be mixed-in.. In thatcase.. I dunno :) It's not that I didn't want to, it's just that I was wondering if there was a better way. Fortunately, version(System) is exactly what I needed in my specific case, even if it isn't a general solution.
Jul 30 2011
On Sat, 23 Jul 2011 23:35:39 -0400, Nick Sabalausky <a a.a> wrote:Is there a way to have a section of code be extern(C) on one OS and extern(Windows) on another OS, without resorting making the code in question a mixin? These doesn't appear to work: ------------------------------ version(Windows) { enum callingConvention = "Windows"; } else { enum callingConvention = "C"; } extern(mixin(callingConvention )) { /+ ...code here... +/ } ------------------------------ version(Windows) { extern(Windows): } else { extern(C): } /+ ...code here... +/ extern(D): ------------------------------does this work? private void fnImpl(...) { // code here } version(Windows) { extern(Windows) fn(...) {fnImpl();} } else { extern(C) fn(...) {fnImpl();} } -Steve
Jul 29 2011