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