sizeof(), macro, stringize, tulostus....

C_vinkki

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;
}

1

125

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • jaaha.

      jaaha

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa

      En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod
      Ikävä
      22
      5234
    2. Huomenta ihana

      Kauniskasvoinen ihanuus 😘 saan sut vielä
      Ikävä
      25
      4398
    3. Hei rakas...

      Miten on työpäivä sujunut? Rakastan sinua 💗
      Ikävä
      28
      2541
    4. Edelleen sitä on vaikea uskoa

      Että olisit oikeasti rakastunut muhun
      Ikävä
      34
      2264
    5. Toiveikas vai toivoton

      torstai? Ajatuksia?
      Ikävä
      37
      2008
    6. Vitsi mihin menit. Heti takasin.

      Mä näin sut tuu takasin! Oli kiire, niin en ehtiny sin perään!
      Ikävä
      15
      1928
    7. En ole koskaan kokenut

      Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka
      Ikävä
      19
      1617
    8. Mukavaa päivää

      Mun rakkauden kohteelle ❤️ toivottavasti olet onnellinen
      Ikävä
      12
      1541
    9. Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...

      Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons
      Suomalaiset julkkikset
      21
      1277
    10. Kerranki asiat oikein

      Ilkka ja muut pienpuolueeet...teitte hyvän työn kun valitsitte pätevän henkilön virkaan eikä kepulle passelia!! Jatkakaa
      Haapavesi
      10
      1194
    Aihe