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

126

    Vastaukset

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

      jaaha

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

    Luetuimmat keskustelut

    1. Mistä puhuitte viimeksi kun näitte

      Kerro yksi aiheista
      Ikävä
      107
      7763
    2. 112
      6026
    3. Se on hyvästi

      Toivottavasti ei tavata.
      Ikävä
      83
      5177
    4. Olenko saanut sinut koukkuun?

      Hyvä. Rakastan sua.
      Ikävä
      139
      4546
    5. Alavuden sairaala

      Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan
      Ähtäri
      11
      3220
    6. Sisäsiittosuus

      Tämän kevään ylioppilaista 90% oli sama sukunimi?
      Suomussalmi
      59
      2997
    7. Miksi sä valitsit

      Juuri minut sieltä?
      Ikävä
      58
      2938
    8. Törkeää toimintaa

      Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818
      Ylivieska
      10
      2454
    9. Kerro nyt rehellisesti fiilikset?

      Rehellinem fiilis
      Suhteet
      61
      2437
    10. Hei........

      Pelkkä sun näkeminen saa mut hymyilemään pitkin iltaa. Oot niin 🤩😘 Edellinen poistettiin.
      Ikävä
      56
      2066
    Aihe