le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Il linguaggio C imposta alcuni simboli predefiniti che possono essere utilizzati direttamente ed elaborati durante la preelaborazione.
__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
Risultati del test:
#define viene utilizzato per scrivere la definizione quando si definisce una costante:
#define MAX 100
La regola logica è sostituire direttamente MAX con 100 quando appare nel codice seguente. Questo passaggio operativo viene completato nella fase di preelaborazione. Generalmente, quando si utilizza #define per definire una costante, il nome viene scritto in maiuscolo.
scene da utilizzare:
#define viene utilizzato per definire le macro allo stesso modo delle funzioni, ma la logica è la sostituzione. Durante la sostituzione, le variabili devono essere racchiuse tra parentesi per evitare problemi di priorità degli operatori che potrebbero portare a risultati imprevisti.
Come usare:
#define MAX(x,y) ((x) > (y) ? (x) : (y))
Questa è una macro scritta per completare il giudizio del valore direttamente più grande di due numeri. Nota che le parentesi dopo il nome della macro dovrebbero essere vicine alla macro.
Caso d'uso:
Attraverso i due casi precedenti, possiamo scoprire che le macro non limitano il tipo quando passano i parametri. Se la funzione viene passata, il tipo restituito della funzione è fisso e la macro viene eseguita più velocemente.
Vantaggi delle macro:
- 1. Quando si completano i calcoli con una piccola quantità di codice, il tempo di lavoro delle macro è inferiore a quello delle funzioni.
- 2. Ancora più importante, i parametri della funzione devono essere dichiarati con tipi specifici. Le macro possono essere applicate a vari tipi che possono essere confrontati utilizzando >. Il tipo di macro è irrilevante.
Svantaggi delle macro:
- Ogni volta che si utilizza una macro, nel programma verrà inserita una copia del codice di definizione della macro. A meno che la macro non sia relativamente breve, ciò potrebbe aumentare significativamente la durata del programma.
- Non è possibile eseguire il debug delle macro.
- Poiché le macro sono indipendenti dal tipo, non sono sufficientemente rigorose.
- Le macro possono causare problemi di precedenza degli operatori, rendendo i programmi soggetti a errori.
Tabella comparativa macro e funzioni:
Attributi | #define macro definite | funzione |
---|---|---|
lunghezza del codice | La macro viene inserita nel programma ogni volta che viene utilizzata.Fatta eccezione per macro molto piccole, la durata del programma aumenterà in modo significativo | Il codice funzione appare solo in un posto; ogni volta che viene utilizzato, viene richiamato lo stesso codice in quel posto |
Velocità di esecuzione | Più veloce | C'è il sovraccarico aggiuntivo delle chiamate e dei ritorni di funzione, che è più lento. |
precedenza dell'operatore | I parametri macro vengono valutati nel contesto di tutte le espressioni circostanti. A meno che non vengano incluse le parentesi, la precedenza degli operatori adiacenti potrebbe avere conseguenze imprevedibili, pertanto è consigliabile scrivere le macro con più parentesi. | I parametri della funzione vengono valutati e passati alla funzione solo quando viene chiamata la funzione. Le espressioni valutano in modo prevedibile. |
Parametri con effetti collaterali | I parametri possono essere sostituiti in più posizioni all'interno del corpo della macro e, se i parametri di una macro vengono valutati più volte, la valutazione dei parametri con effetti collaterali può produrre risultati imprevedibili. | I parametri della funzione vengono valutati solo quando si passano i parametri e sono facili da controllare. |
Tipo di parametro | I parametri della macro non hanno nulla a che fare con il tipo Finché l'operazione sui parametri è legale, può essere utilizzata per qualsiasi tipo di parametro. | I parametri della funzione sono correlati al tipo. Se sono diversi, sono necessarie funzioni diverse e le attività sono diverse. |
eseguire il debug | Le macro sono scomode per il debug | È possibile eseguire il debug delle funzioni istruzione per istruzione |
ricorsione | Le macro non possono essere ricorsive | Le macro non possono essere ricorsive |
L'operatore # converte un argomento di una macro in una stringa letterale. È consentito solo apparire nell'elenco di sostituzione di una macro con parametri.
L'operazione eseguita dall'operatore # può essere intesa come "stringificazione".
Esempio di utilizzo:
## può combinare i simboli su entrambi i lati in un unico simbolo, consentendo alle definizioni macro di creare identificatori da segmenti di testo separati.colla per pennarelli
Tale connessione deve produrre un identificatore valido. Altrimenti il risultato è indefinito. Consideriamolo qui. Quando si scrive una funzione per trovare il valore più grande di due numeri, è necessario scrivere funzioni diverse per tipi di dati diversi.
Esempio di utilizzo: