Hi Gus, > I'm aware of the Labels as a Value feature. However, it seems it only work > with goto label instruction. > In my particular case, I need to use the label just to pass the relative > address of the label as a parameter to a @define statement. Yes, the label-as-value is primarily used for goto expressions, but as you can see from the online documentation: "You can get the address of a label defined in the current function (or a containing function) with the unary operator `&&'. The value has type void *. This value is a constant and can be used wherever a constant of that type is valid. For example: void *ptr; /* ... */ ptr = &&foo; " So, this label-as-value thing will return the address of the label which should be the address of the first instruction following the label. > I tried using this and it didn't work. This is because your code finally ends up with this expression: (void*)ptr >> 4 and gcc doesn't allow the shift operation to be performed on pointer types. A possible solution to your problem could be the following code: === #include <stdio.h> #include <stdint.h> #define SHADDR(ptr) (void*)((uintptr_t)(ptr) >> 4) int main () { int a, b=10; label1: a = b + 20; void *ptr = SHADDR(&&label1); } === Hope that helps, Andi > Andi Hellmund wrote: >> >> Hi Gus, >>> However, it seems like it only works in GCC if goto(label1) instruction >>> is >>> used... Is there any other way to do this? >>> >> >> you might want to have a look at this online doc about label-as-values: >> >> http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html >> >> If I remember correctly, this is not part of an official standard >> (except the GNU C standard), so the portability of your code might >> decrease. >> >> Best regards, >> Andi >> >> >> >> > > -- > View this message in context: > http://old.nabble.com/Passing-an-address-to-a--define-in-C-tp31890487p31894925.html > Sent from the gcc - Help mailing list archive at Nabble.com. > > >