Condivisione della tecnologia

Preelaborazione del "linguaggio C".

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Simboli predefiniti

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,否则未定义
  • 1
  • 2
  • 3
  • 4
  • 5

Risultati del test:
Inserisci qui la descrizione dell'immagine

2. #define definisce le costanti

#define viene utilizzato per scrivere la definizione quando si definisce una costante:

#define MAX 100
  • 1

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:
Inserisci qui la descrizione dell'immagine

3. #define definisce le macro

#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))
  • 1

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:
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

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.

4. Confronto delle funzioni di aggiornamento macro

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:

    1. 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.
    1. Non è possibile eseguire il debug delle macro.
    1. Poiché le macro sono indipendenti dal tipo, non sono sufficientemente rigorose.
    1. Le macro possono causare problemi di precedenza degli operatori, rendendo i programmi soggetti a errori.

Tabella comparativa macro e funzioni:

Attributi#define macro definitefunzione
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 significativoIl codice funzione appare solo in un posto; ogni volta che viene utilizzato, viene richiamato lo stesso codice in quel posto
Velocità di esecuzionePiù veloceC'è il sovraccarico aggiuntivo delle chiamate e dei ritorni di funzione, che è più lento.
precedenza dell'operatoreI 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 collateraliI 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 parametroI 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 debugLe macro sono scomode per il debugÈ possibile eseguire il debug delle funzioni istruzione per istruzione
ricorsioneLe macro non possono essere ricorsiveLe macro non possono essere ricorsive

5. # e ##

1. #operatore

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:
Inserisci qui la descrizione dell'immagine

2. ## operatore

## 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:
Inserisci qui la descrizione dell'immagine