Referință rapidă de sintaxă pentru preprocesorul C (cpp), care poate fi invocat independent sau în cadrul toolchain-urilor C/C++.
Preprocesare autonomă
Rularea preprocesorului direct fără invocarea compilatorului:
# -P inhibă generarea indicatorilor de linie
cpp -P source.c > preprocessed.c
Includerea fișierelor antet
#include <stdio.h> /* Antete de sistem și bibliotecă standard */
#include "my_header.h" /* Antete locale ale proiectului */
Definiții macro
#define BUFFER_SIZE 1024
#define PI 3.1415926535
/* Anularea definirii unei macrocomenzi */
#undef BUFFER_SIZE
Macrocomenzi tip funcție
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define DEG_TO_RAD(x) ((x) * 0.0174532925)
Transformare în șiruri (#)
Operatorul simplu # convertește parametrii macrocomenzii în șiruri literale:
#define STR(name) #name
#define PRINT_VAR(x) printf("%s = %d\n", #x, x)
char *var_name = STR(my_object); /* → "my_object" */
Concatenare de tokeni (##)
Operatorul dublu ## unește doi tokeni într-un singur token:
#define COMMAND(NAME) { #NAME, NAME ## _command }
struct command commands[] = {
COMMAND(quit), /* → { "quit", quit_command } */
COMMAND(help) /* → { "help", help_command } */
};
Compilare condiționată
#ifdef DEBUG
#define LOG(msg) printf("[DEBUG] %s\n", msg)
#elif defined(VERBOSE)
#define LOG(msg) printf("[INFO] %s\n", msg)
#else
#define LOG(msg) /* noop */
#endif
/* Gărzi de includere (Include guards) */
#ifndef MY_HEADER_H
#define MY_HEADER_H
/* declarații aici */
#endif /* MY_HEADER_H */
Diagnosticare și avertismente
#if __STDC_VERSION__ < 201112L
#warning "C11 features are not fully enabled"
#endif
#if !defined(REQUIRED_CONFIG)
#error "REQUIRED_CONFIG must be defined before compilation"
#endif
Macrocomenzi predefinite standard
__FILE__: Numele fișierului sursă curent ca șir.__LINE__: Numărul liniei curente ca număr întreg.__DATE__: Data compilării ca șir (Mmm dd yyyy).__TIME__: Ora compilării ca șir (hh:mm:ss).