Namespace
Varianti

Replacing text macros

Da cppreference.com.

 
 
Linguaggio C + +
Temi generali
Original:
General topics
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Controllo del flusso
Original:
Flow control
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Dichiarazioni esecuzione condizionale
Original:
Conditional execution statements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Iterazione dichiarazioni
Original:
Iteration statements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Vai dichiarazioni
Original:
Jump statements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Funzioni
Original:
Functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
dichiarazione di funzione
lambda funzione dichiarazione
funzione di modello
specificatore inline
eccezioni specifiche (deprecato)
noexcept specificatore (C++11)
Eccezioni
Original:
Exceptions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Spazi dei nomi
Original:
Namespaces
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Tipi
Original:
Types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
decltype specifier (C++11)
Specifiers
Original:
Specifiers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
cv specificatori
Durata di stoccaggio specificatori
constexpr specificatore (C++11)
specificatore auto (C++11)
alignas specificatore (C++11)
Inizializzazione
Original:
Initialization
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Letterali
Original:
Literals
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Espressioni
Original:
Expressions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
rappresentazioni alternative
Utilities
Original:
Utilities
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Tipi
Original:
Types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
typedef declaration
Tipo alias dichiarazione (C++11)
attributi (C++11)
Lancia
Original:
Casts
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
conversioni implicite
const_cast conversion
static_cast conversion
dynamic_cast conversion
reinterpret_cast conversion
Fusione C-stile e funzionale
Occupazione della memoria
Original:
Memory allocation
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Classi
Original:
Classes
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Specifiche per una classe di funzioni proprietà
Original:
Class-specific function properties
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
esplicito (C++11)
statico
Funzioni membro speciali
Original:
Special member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Modelli
Original:
Templates
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
classe template
funzione di modello
modello di specializzazione
parametri confezioni (C++11)
Varie
Original:
Miscellaneous
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Montaggio in linea
 
 
Il preprocessore supporta macro di sostituzione del testo. Funzione-come la sostituzione macro di testo è anche supportato.
Original:
The preprocessor supports text macro replacement. Function-like text macro replacement is also supported.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Indice

[modifica] Sintassi

#define identifier replacement-list (1)
#define identifier( parameters ) replacement-list (2)
#define identifier( parameters, ... ) replacement-list (3)
#define identifier( ... ) replacement-list (4)
#undef identifier (5)

[modifica] Spiegazione

[modifica] NJ direttive

Le direttive #define definire la identifier come macro, ovvero indicare al compilatore di sostituire tutte le occorrenze successive identifier con replacement-list, che può essere facoltativamente ulteriormente elaborati. Se l'identificatore è già definito come qualsiasi tipo di macro, il programma è malformati.
Original:
The #define directives define the identifier as macro, that is instruct the compiler to replace all successive occurrences of identifier with replacement-list, which can be optionally additionally processed. If the identifier is already defined as any type of macro, the program is ill-formed.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Oggetto di tipo macro
Oggetto di tipo macro sostituire ogni occorrenza di identifier definito con replacement-list. Version (1), della direttiva #define si comporta esattamente così.
Original:
Object-like macros replace every occurrence of defined identifier with replacement-list. Version (1) of the #define directive behaves exactly like that.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Funzione di tipo macro
Funzione di tipo macro sostituire ogni occorrenza di identifier definito con replacement-list, inoltre prendendo un certo numero di argomenti, che poi sostituire le occorrenze corrispondenti di uno dei parameters nel replacement-list. Il numero di argomenti deve essere uguale al numero di argomenti a macro definizione (parameters) o il programma è mal formata. Se l'identificatore non è funzionale in-notazione, cioè non ha parentesi dopo sé, non è affatto sostituito.
Original:
Function-like macros replace each occurrence of defined identifier with replacement-list, additionally taking a number of arguments, which then replace corresponding occurrences of any of the parameters in the replacement-list. The number of arguments must be the same as the number of arguments in macro definition (parameters) or the program is ill-formed. If the identifier is not in functional-notation, i.e. does not have parentheses after itself, it is not replaced at all.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Versione (2), della direttiva #define definisce una semplice funzione di tipo macro.
Original:
Version (2) of the #define directive defines a simple function-like macro.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Version (3), della direttiva #define definisce una funzione di tipo macro con numero variabile di argomenti. Gli argomenti aggiuntivi possono essere accessibili tramite identificativo __VA_ARGS__, che viene poi sostituito con argomenti, forniti con l'identificatore da sostituire.
Original:
Version (3) of the #define directive defines a function-like macro with variable number of arguments. The additional arguments can be accessed using __VA_ARGS__ identifier, which is then replaced with arguments, supplied with the identifier to be replaced.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Version (4), della direttiva #define definisce una funzione di tipo macro con numero variabile di argomenti, ma senza argomenti regolari. Gli argomenti si può accedere solo con identificatore __VA_ARGS__, che viene poi sostituito con argomenti, forniti con l'identificatore di essere sostituito.
Original:
Version (4) of the #define directive defines a function-like macro with variable number of arguments, but no regular arguments. The arguments can be accessed only with __VA_ARGS__ identifier, which is then replaced with arguments, supplied with identifier to be replaced.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[modifica] NJ e NJ operatori

In funzione di tipo macro, un operatore # prima di un identificatore nel replacement-list corre l'identificatore tramite la sostituzione dei parametri e racchiude il risultato tra virgolette, creando una stringa letterale. Inoltre, aggiunge il preprocessore backslahes per sfuggire le virgolette letterali di stringa integrati, se del caso, e raddoppia i backslash all'interno della stringa, se necessario. Tutti gli spazi iniziali e finali viene rimosso, e qualsiasi sequenza di spazi vuoti al centro del testo (ma non letterali stringa all'interno incorporati) è compresso in un singolo spazio. Questa operazione è chiamata "in stringa". Se il risultato di in stringa non è una stringa valida letterale, il comportamento è indefinito.
Original:
In function-like macros, a # operator before an identifier in the replacement-list runs the identifier through parameter replacement and encloses the result in quotes, effectively creating a string literal. In addition, the preprocessor adds backslahes to escape the quotes surrounding embedded string literals, if any, and doubles the backslashes within the string as necessary. All leading and trailing whitespace is removed, and any sequence of whitespace in the middle of the text (but not inside embedded string literals) is collapsed to a single space. This operation is called "stringification". If the result of stringification is not a valid string literal, the behavior is undefined.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Un operatore ## tra due identificatori successivi nella replacement-list eseguito la sostituzione del parametro sulle due identificatori e quindi concatena il risultato. Questa operazione è chiamata "concatenazione" o "token incolla". Solo token che formano un token valido insieme possono essere incollati: identificatori che formano un identificatore più, cifre che formano un numero, o gli operatori + e = che formano un +=. Il tuo commento non può essere creato da / copia e incolla * perché i commenti vengono rimossi dal testo prima sostituzione macro è considerato. Se il risultato della concatenazione non è un token valido, il comportamento è indefinito.
Original:
A ## operator between any two successive identifiers in the replacement-list runs parameter replacement on the two identifiers and then concatenates the result. This operation is called "concatenation" or "token pasting". Only tokens that form a valid token together may be pasted: identifiers that form a longer identifier, digits that form a number, or operators + and = that form a +=. A comment cannot be created by pasting / and * because comments are removed from text before macro substitution is considered. If the result of concatenation is not a valid token, the behavior is undefined.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[modifica] NJ direttiva

La direttiva #undef indefinito il identifier, che annulla la precedente definizione del identifier dalla direttiva #define. Se l'identificatore non sono associate macro, la direttiva viene ignorata.
Original:
The #undef directive undefines the identifier, that is cancels previous definition of the identifier by #define directive. If the identifier does not have associated macro, the directive is ignored.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[modifica] Macro predefinite

I nomi delle macro seguenti sono predefiniti in ogni unità di traduzione.
Original:
The following macro names are predefined in any translation unit.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
__cplusplus
si espande per 199711L(C fino + 11) valore o 201103L(dal C++11)
Original:
expands to value 199711L(C fino + 11) or 201103L(dal C++11)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__STDC_HOSTED__
(C++11)
restituisce il 1 costante intera se l'implementazione è ospitato (viene eseguito con un sistema operativo), 0 se freestanding (eseguito senza un sistema operativo)
Original:
expands to the integer constant 1 if the implementation is hosted (runs under an OS), 0 if freestanding (runs without an OS)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__FILE__
restituisce il nome del file corrente, come una stringa di caratteri letterale
Original:
expands to the name of the current file, as a character string literal
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__LINE__
restituisce il numero di riga del file di origine, una costante intera
Original:
expands to the source file line number, an integer constant
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__DATE__
si espande alla data della traduzione, una stringa di caratteri letterale della forma "Mmm dd yyyy". Il nome del mese è come se generato da std::asctime()
Original:
expands to the date of translation, a character string literal of the form "Mmm dd yyyy". The name of the month is as if generated by std::asctime()
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__TIME__
si espande al tempo della traduzione, una stringa di caratteri letterale della forma "hh: mm: ss"
Original:
expands to the time of translation, a character string literal of the form "hh:mm:ss"
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
I nomi seguenti macro addizionali possono essere predefiniti dalle implementazioni.
Original:
The following additional macro names may be predefined by the implementations.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
__STDC__
attuazione valore definito, se presente
Original:
implementation-defined value, if present
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__STDC_VERSION__
(C++11)
attuazione valore definito, se presente
Original:
implementation-defined value, if present
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__STDC_ISO_10646__
(C++11)
si espande per una costante intera del yyyymmL modulo, se wchar_t utilizza Unicode, la data indica l'ultima revisione di Unicode supportato
Original:
expands to an integer constant of the form yyyymmL, if wchar_t uses Unicode, the date indicates the latest revision of Unicode supported
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__STDC_MB_MIGHT_NEQ_WC__
(C++11)
si espande per 1 se la codifica dei caratteri gamma di set di caratteri di base può non essere uguale la loro codifica stretta
Original:
expands to 1 if wide character encoding of the basic character set may not equal their narrow encoding
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__STDCPP_STRICT_POINTER_SAFETY__
(C++11)
si espande per 1 se l'attuazione è std::pointer_safety rigorosa
Original:
expands to 1 if the implementation has strict std::pointer_safety
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
__STDCPP_THREADS__
(C++11)
espande 1 se il programma può avere più di un thread di esecuzione
Original:
expands to 1 if the program can have more than one thread of execution
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(macro costante)
I valori di questi macro (ad eccezione di __FILE__ e __LINE__) rimangono costanti per tutta l'unità di traduzione. I tentativi di ridefinire o non definire queste si traducono in un comportamento indefinito macro.
Original:
The values of these macros (except for __FILE__ and __LINE__) remain constant throughout the translation unit. Attempts to redefine or undefine these macros result in undefined behavior.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Nota: nel campo di applicazione di ogni corpo della funzione, esiste una speciale funzione di variabile locale predefinito denominato __func__(dal C++11), definito come un array di caratteri statica che contiene il nome della funzione in esecuzione formato definito. Non è una macro di preprocessore, ma è usato insieme __FILE__ e __LINE__, ad esempio, da assert.
Original:
Note: in the scope of every function body, there is a special function-local predefined variable named __func__(dal C++11), defined as a static character array holding the name of the function in implementation-defined format. It is not a preprocessor macro, but it is used together with __FILE__ and __LINE__, e.g. by assert.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[modifica] Esempio

#include <iostream>
 
//make function factory and use it
#define FUNCTION(name, a) int fun_##name() { return a;}
 
FUNCTION(abcd, 12);
FUNCTION(fff, 2);
FUNCTION(kkk, 23);
 
#undef FUNCTION
#define FUNCTION 34
#define OUTPUT(a) std::cout << #a << '\n'
 
int main()
{
    std::cout << "abcd: " << fun_abcd() << '\n';
    std::cout << "fff: " << fun_fff() << '\n';
    std::cout << "kkk: " << fun_kkk() << '\n';
    std::cout << FUNCTION << '\n';
    OUTPUT(million);               //note the lack of quotes
}

Output:

abcd: 12
fff: 2
kkk: 23
34
million