Re: C pointer különbség képzés
Palasik Sandor
palasik at mail.datanet.hu
Wed Jan 11 18:00:00 CET 2006
> A következő gondom van, két függvény pointer különbségét szeretném
> képezni forditási idöben, valahogy igy:
>
> const int Foo1(void);
> const int Foo2(void);
>
> const unsigned short offset[]= { (short)((int)Foo1-(int)Foo2)) };
>
> Sajnos se short se int se unsigned megoldással nem müködik,
> mindenképpen egy fix értéket keres a forditó.
>
> Ez még müködik:
> const unsigned int address[]={ (int)Foo1,(int)Foo2};
> de sajnos nem erre van szükségem.
Tegyél le róla. Ez nem fordító, hanem linker probléma. A linker nem tud
kivonni. A tömbök feltöltését a fordító lepasszolja a linkernek. Annak
viszont nem lehet olyat mondani, hogy egy rekeszbe két különböző objektum
címének különbségét tegye. Lehetne ilyen, de én még nem láttam. Talán VMS-en
tudott a linker ilyet.
MS C fordítóval próbálgatom:
int a;
int b;
int c[] = {
(int)&b,
-(int)&a, // X.C(5) : error C2099: initializer is not a constant
(int)&b-(int)&a, // X.C(6) : error C2099: initializer is not a constant
(int)&b+(int)&a, // X.C(7) : error C2099: initializer is not a constant
(int)&b + 1,
(int)&b & 15 // X.C(9) : error C2099: initializer is not a constant
};
Szerintem az egy extern + konstans a legbonyolultabb, amit el tud képzelni.
Palasik Sándor
More information about the Elektro
mailing list