GNU/Linux >> Linux Esercitazione >  >> Linux

implementazione dell'operatore sizeof

Il sizeof operator fa parte delle specifiche del linguaggio C (e C++) ed è implementato all'interno del compilatore (il front-end). Non c'è modo di implementarlo con altri costrutti C (a meno che non si utilizzino estensioni GCC come typeof) perché può accettare tipi o espressioni come operando, senza creare alcun effetto collaterale (ad es. sizeof((i>1)?i:(1/i)) non andrà in crash quando i==0 ma la tua macro my_sizeof andrebbe in crash con una divisione per zero). Vedi anche le linee guida per la codifica in C e wikipedia.

Dovresti capire l'aritmetica del puntatore C. Vedi ad es. questa domanda. La differenza del puntatore è espressa in elementi non in byte.


Il risultato della sottrazione del puntatore è in elementi e non in byte. Quindi la prima espressione restituisce 1 per definizione.

A parte questo, dovresti davvero usare le parentesi nelle macro:

#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)

Altrimenti tentando di usare my_sizeof() in un'espressione può portare a errori.


Linux
  1. -eq:operatore unario previsto?

  2. 7 Linux Grep OR, Grep AND, Grep NOT Esempi di operatori

  3. 6 Operatori di concatenamento della riga di comando della shell Bash in Linux

  4. Implementazione di più pipe in C

  5. Implementazione delle variabili condizionali

Risolto il problema con "Implementazione del controller USB 2.0 non trovata!" Errore VirtualBox

Come creare un certificato TLS/SSL con un operatore Cert-Manager su OpenShift

[ :Operatore imprevisto nella programmazione della shell

L'accesso all'heap è serializzato?

Implementazione dell'air-gap per l'uso del personal computer

GZip non produce lo stesso risultato compresso su macOS rispetto a Linux