www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Offset of globals in linking time.

reply "JDavidls" <jdavidls gmail.com> writes:
Hi

I need to initialize a global variable with a pointer to another 
global variable but dmd compler raises an error:

uint a = 5;
uint* p = &a; // error: non-constant expression & a
const uint* cp = &a; // error: non-constant expression & a

All C compilers support this assignation ¿whi dlang cannot?

I think this is a great limitation for writing huge dependent of 
initial-state defined program as a virtual machine (in this case).

---

Just try it with ldc, appears to work. I'm also compiling gdc for 
test with it.


Thanks,
Feb 04 2013
next sibling parent reply "Peter Alexander" <peter.alexander.au gmail.com> writes:
On Monday, 4 February 2013 at 20:16:54 UTC, JDavidls wrote:
 I need to initialize a global variable with a pointer to 
 another global variable but dmd compler raises an error:
That's because a is not a global variable, it is thread local. Try: __gshared uint a = 5;
Feb 04 2013
parent "JDavidls" <jdavidls gmail.com> writes:
 That's because a is not a global variable, it is thread local.
Oh, thanks
Feb 04 2013
prev sibling parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
On 02/04/2013 12:16 PM, JDavidls wrote:
 Hi

 I need to initialize a global variable with a pointer to another global
 variable but dmd compler raises an error:

 uint a = 5;
 uint* p = &a; // error: non-constant expression & a
 const uint* cp = &a; // error: non-constant expression & a

 All C compilers support this assignation ¿whi dlang cannot?

 I think this is a great limitation for writing huge dependent of
 initial-state defined program as a virtual machine (in this case).

 ---

 Just try it with ldc, appears to work. I'm also compiling gdc for test
 with it.


 Thanks,
Another option is to initialize in a 'static this()' block: uint a = 5; uint* p; const uint* cp; static this() { p = &a; cp = &a; } Ali
Feb 04 2013