KEYWORDS: C gcc macro stringize offset sizeof printf tietue kenttä muuttuja koko
Jos tarvitaan tapaa, jolla saada näppärästi koodi toimimaan näin:
UD(inp_fill);
- tulostaa tietueen kentän inp_fill offsetin tietueessa, koon ja nimen
SEKÄ
IV(c);
- tulostaa muuttujann c koon ja nimen
- tulosteet heksadesimaalisina:
se sujuu allaolevan tapaisella koodilla ...
( jäikö tästä vielä jotain tärkeää pois ??? )
struct ud
{
int (*inp_hook) (struct ud*);
uint8_t inp_curr;
uint8_t inp_fill;
};
typedef struct ud ud_t;
typedef unsigned char BYTE;
typedef BYTE* PBYTE;
// #define HEX "0x" // a C -style hexadecimal prefix
#define HEX "$" // a Delphi -style hexadecimal prefix
void showFieldInfo(char *name, int size, PBYTE fieldaddr, PBYTE therec) {
//
int offset;
if ( (int)therec == 0 ) {
// no record.
printf("size: %s%08x name: [%s]\n", HEX, size, name);
} else {
// yes, a record:
offset = (int)fieldaddr - (int)therec;
printf("offset: %s%08x size: %s%08x name: [%s]\n", HEX, offset, HEX, size, name);
}
}
#define INFO_ANY(RECORD, fieldname) showFieldInfo(#fieldname, sizeof(RECORD.fieldname), (PBYTE)&RECORD.fieldname, (PBYTE)&RECORD)
#define INFO_UD(fieldname) INFO_ANY(ud_obj, fieldname)
#define UD INFO_UD
#define INFO_VAR(fieldname) showFieldInfo(#fieldname, sizeof(fieldname), (PBYTE)&fieldname, NULL)
#define IV INFO_VAR
int main(void) {
ud_t ud_obj;
printf("sizeOf(ud_t) = %d\n", sizeof(ud_t));
printf("\n");
printf("\n");
printf("NOTE: All offsets and sizes below are hexadecimal.\n");
printf("\n");
UD(inp_hook);
UD(inp_curr);
UD(inp_fill);
long unsigned long c;
IV(c);
return 0;
}
sizeof(), macro, stringize, tulostus....
C_vinkki
1
117
Vastaukset
- jaaha.
jaaha
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 1586430
- 511854
Klaukkalan onnettomuus 4.4
Klaukkalassa oli tänään se kolmen nuoren naisen onnettomuus, onko kellään mitään tietoa mitä kävi tai ketä onnettomuudes441560- 541122
Ukraina ja Zelenskyn ylläpitämä sota tuhoaa Euroopan, ei Venäjä
Mutta tätä ei YLE eikä Helsingin Sanomat kerto.3261050Kolari Klaukkala
Kaksi teinityttö kuoli. Vastaantulijoille ei käynyt mitenkään. Mikä auto ja malli telineillä oli entä se toinen auto? Se48981Ooo! Kaija Koo saa kesämökille öky-rempan:jättimäinen terde, poreallas... Katso ennen-jälkeen kuvat!
Wow, nyt on Kaija Koon mökkipihalla kyllä iso muutos! Miltä näyttää, haluaisitko omalle mökillesi vaikkapa samanlaisen l13950Kevyt on olo
Tiedättekö, että olo kevenee kummasti, kun päästää turhista asioista tai ihmisistä irti! Tämä on hyvä näin <384908Olisinpa jo siellä, otatkohan minut vastaan
Olisitpa lähelläni ja antaisit minun maalata sinulle kuvaa siitä kaikesta ikävästä, tuskasta, epävarmuudesta ja mieleni79908Toivoisin, että lähentyisit kanssani
Tänään koin, että välillämme oli enemmän. Kummatkin katsoivat pidempään kuin tavallisesti toista silmiin. En tiedä mistä14887