Articles of preprocessore

Macro vs Funzione in C

Ho sempre visto esempi e casi in cui l’utilizzo di una macro è migliore rispetto all’utilizzo della funzione. Qualcuno potrebbe spiegarmi con un esempio lo svantaggio di una macro rispetto ad una funzione?

In che modo, esattamente, funziona il trucco a doppia stringa?

Almeno alcuni preprocessori C ti permettono di stringere il valore di una macro, piuttosto che il suo nome, facendolo passare attraverso una macro simile a una funzione ad un’altra che lo stringa: #define STR1(x) #x #define STR2(x) STR1(x) #define THE_ANSWER 42 #define THE_ANSWER_STR STR2(THE_ANSWER) /* “42” */ Esempi di utilizzo qui . Questo funziona, almeno […]

Virgola in macro C / C ++

Diciamo che abbiamo una macro come questa #define FOO(type,name) type name Che potremmo usare come FOO(int, int_var); Ma non sempre così semplicemente: FOO(std::map, map_var); // error: macro “FOO” passed 3 arguments, but takes just 2 Certo che potremmo fare: typedef std::map map_int_int_t; FOO(map_int_int_t, map_var); // OK che non è molto ergonomico. Devono essere affrontate anche […]

Esiste un pre-processore C che elimina i blocchi di #ifdef in base a valori definiti / non definiti?

Domanda originale Quello che mi piacerebbe non è un pre-processore C standard, ma una variazione su di esso che accetterebbe da qualche parte – probabilmente la riga di comando tramite le opzioni -DNAME1 e -UNAME2 – una specifica di quali macro sono definite, e quindi eliminerebbe la morte codice. Potrebbe essere più facile capire cosa […]

Perché #ifndef e #define sono usati nei file di intestazione C ++?

Ho visto un codice come questo di solito all’inizio dei file di intestazione: #ifndef HEADERFILE_H #define HEADERFILE_H E alla fine del file è #endif Qual è lo scopo di questo?

#if DEBUG vs. Condizionale (“DEBUG”)

Quale è meglio usare e perché, su un grande progetto: #if DEBUG public void SetPrivateValue(int value) { … } #endif o [System.Diagnostics.Conditional(“DEBUG”)] public void SetPrivateValue(int value) { … }

Quando sono utili i macro C ++?

Il preprocessore C è giustamente temuto e evitato dalla comunità C ++. Funzioni, consensi e modelli integrati sono in genere un’alternativa più sicura e superiore a un #define . La seguente macro: #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) non è in alcun modo superiore al tipo sicuro: inline bool succeeded(int hr) { return hr >= 0; […]

Come convertire una variabile di tipo enum in una stringa?

Come rendere printf per mostrare i valori delle variabili che sono di un tipo enum? Per esempio: typedef enum {Linux, Apple, Windows} OS_type; OS_type myOS = Linux; e quello di cui ho bisogno è qualcosa di simile printenum(OS_type, “My OS is %s”, myOS); che deve mostrare una stringa “Linux”, non un intero. Suppongo, prima di […]

Uso del mondo reale di X-Macros

Ho appena appreso di X-Macros . Quali usi reali di X-Macros hai visto? Quando sono lo strumento giusto per il lavoro?

MIN e MAX in C

Dove sono MIN e MAX definiti in C, se non del tutto? Qual è il modo migliore per implementarli, in modo generico e digitare il più sicuro ansible? (Le estensioni del compilatore / builtin per i compilatori mainstream preferiti.)