Articles of c preprocessore

Rappresentare grandi numeri nel codice sorgente per la leggibilità?

Esiste un modo più leggibile per rappresentare grandi numeri nel codice sorgente di un’applicazione scritta in C ++ o C? prendiamo ad esempio il numero 2,345,879,444,641 , in C o C ++ se volessimo che un programma restituisse questo numero che faremmo return 2345879444641 . Ma questo non è veramente leggibile. Ad esempio, in PAWN […]

#define in Java

Sto iniziando a programmare in Java e mi chiedo se esiste l’equivalente del #define C ++. Una rapida ricerca su google dice che non è così, ma qualcuno potrebbe dirmi se qualcosa di simile esiste in Java? Sto cercando di rendere il mio codice più leggibile. Invece di myArray[0] voglio essere in grado di scrivere […]

C ++: una macro può espandere “abc” in “a”, “b”, “c”?

Ho scritto un modello variadic che accetta un numero variabile di parametri char , es template struct Foo; Mi stavo chiedendo se ci fossero dei trucchi macro che mi permettessero di creare un’istanza con una syntax simile alla seguente: Foo o Foo o Foo eccetera. In pratica, tutto ciò che ti impedisce di scrivere i […]

Namespace in C

C’è un modo per (ab) usare il preprocessore C per emulare gli spazi dei nomi in C ? Sto pensando a qualcosa in questo senso: #define NAMESPACE name_of_ns some_function() { some_other_function(); } Questo verrebbe tradotto in: name_of_ns_some_function() { name_of_ns_some_other_function(); }

Posso ridefinire una macro C ++ e poi definirla?

Sto usando sia la libreria JUCE che un numero di intestazioni Boost nel mio codice. Juce definisce “T” come una macro (gemito), e Boost spesso usa “T” nelle sue definizioni di template. Il risultato è che se in qualche modo includi le intestazioni JUCE prima delle intestazioni Boost, il preprocessore espande la macro JUCE nel […]

La dimensione di (enum) == sizeof (int), sempre?

La dimensione di (enum) == sizeof (int), sempre? O dipende dal compilatore? È sbagliato dire che il compilatore è ottimizzato per le lunghezze delle parole (allineamento della memoria), cioè y int è la dimensione della parola su un particolare compilatore? Significa che non c’è penalità di elaborazione se uso le enumerazioni, dato che sarebbero allineate […]

Capire contenitore_di macro nel kernel di Linux

Durante la navigazione nel kernel di Linux, ho trovato un container_of macro che è definito come segue: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr – offsetof(type,member) );}) Capisco cosa fa container_of do, ma quello che non capisco è l’ultima frase, che è (type […]

Macro di dimensione array che rifiuta i puntatori

La macro standard della dimensione dell’array che viene spesso insegnata è #define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0])) o qualche formazione equivalente. Tuttavia, questo genere di cose riesce silenziosamente quando viene passato un puntatore, e fornisce risultati che possono sembrare plausibili in fase di runtime fino a quando le cose non scompaiono misteriosamente. È fin troppo facile […]

Numero di riga C / C ++

Per motivi di debug, posso ottenere il numero di riga nei compilatori C / C ++? (modo standard o modi specifici per determinati compilatori) per esempio if(!Logical) printf(“Not logical value at line number %d \n”,LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)

Dovrei usare #define, enum o const?

In un progetto C ++ su cui sto lavorando, ho un tipo di valore di flag che può avere quattro valori. Quelle quattro bandiere possono essere combinate. Le bandiere descrivono i record nel database e possono essere: nuovo record record cancellato record modificato record esistente Ora, per ogni record, desidero mantenere questo attributo, quindi potrei […]