C ertokhoz kerdes
Palasik Sandor
palasik at mail.datanet.hu
Wed Oct 20 12:17:17 CEST 2004
Szia!
Ez inkább linker problémának látszik. Mi tudjuk, hogy két függvénypointer
különbsége konstans, de a compiler nem. Illetve valószínűleg nem tud olyan
műveletet beírni az objectba, hogy két external különbségét számolja ki.
Csináltam egy példát. Az inicializálást kikommenteztem és beírtam hozzá azt
a hibajelzést, amit adott rá eredetileg. Kicsit perverz, és arra
támaszkodik, hogy a kódok rövidek, úgyhogy a pointerek különbsége elfér egy
bájtban, de lefordítva működik.
Palasik Sándor
#include <stdio.h>
#include <stdlib.h>
void ITEM0(void)
{
printf("ITEM0\n");
}
void ITEM1(void)
{
printf("ITEM1\n");
}
void ITEM2(void)
{
printf("ITEM2\n");
}
void ITEM3(void)
{
printf("ITEM3\n");
}
unsigned char delta_items[4]
/*
= { (unsigned char)ITEM1-(unsigned char)ITEM0,
(unsigned char)ITEM1-(unsigned char)ITEM0,
(unsigned char)ITEM2-(unsigned char)ITEM0,
(unsigned char)ITEM3-(unsigned char)ITEM0}
FUNNY.C(26) : error C2099: initializer is not a constant
FUNNY.C(27) : error C2099: initializer is not a constant
FUNNY.C(28) : error C2099: initializer is not a constant
FUNNY.C(29) : error C2099: initializer is not a constant
*/
;
int main()
{
int i;
delta_items[0] = (unsigned char)ITEM0-(unsigned char)ITEM0;
delta_items[1] = (unsigned char)ITEM1-(unsigned char)ITEM0;
delta_items[2] = (unsigned char)ITEM2-(unsigned char)ITEM0;
delta_items[3] = (unsigned char)ITEM3-(unsigned char)ITEM0;
for (i=0; i<4; i++)
((void (*)(void))((int)ITEM0+delta_items[i]))();
return 0;
}
More information about the Elektro
mailing list