Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

const în C

Marchează o variabilă ca doar pentru citire: compilatorul oprește orice încercare de a o modifica.

Sintaxă
const tip nume = valoare;
const int *p;        // nu poți modifica *p
int *const p = &x;   // nu poți muta p
const int *const p;  // niciuna

Ce face const

O variabilă const primește valoarea la declarare și apoi nu mai poate fi schimbată. Dacă încerci, compilatorul dă eroare. Folosește const pentru valori fixe (TVA, număr maxim de elevi) și pentru parametrii pe care funcția doar îi citește.

La pointeri, poziția lui const contează: const int *p înseamnă „prin p nu modific valoarea” (pointer la constantă), iar int *const p înseamnă „p arată mereu spre aceeași adresă” (pointer constant). Citește de la dreapta la stânga: p este un pointer constant la int.

În C, o variabilă const nu este o constantă de compilare: nu o poți folosi ca dimensiune a unui tablou global sau într-un case. Pentru asta există #define, enum sau, din C23, constexpr.

Exemple

Exemplul 1: O constantă pentru TVA

TVA nu poate fi modificat după declarare. Prețul cu TVA se calculează din prețul fără TVA.

#include <stdio.h>

int main(void) {
    const double TVA = 0.21;
    double pret = 100.0;
    printf("Preț cu TVA: %.2f lei\n", pret * (1 + TVA));
    return 0;
}

Rezultat

Preț cu TVA: 121.00 lei

Exemplul 2: Ce se întâmplă dacă modifici o constantă

Codul nu se compilează. Mesajul de mai jos este cel dat de clang.

#include <stdio.h>

int main(void) {
    const double TVA = 0.21;
    TVA = 0.19;
    printf("%.2f\n", TVA);
    return 0;
}

Eroare de compilare (clang)

exemplu.c:5:9: error: cannot assign to variable 'TVA' with const-qualified type 'const double'
    5 |     TVA = 0.19;
      |     ~~~ ^
exemplu.c:4:18: note: variable 'TVA' declared const here
    4 |     const double TVA = 0.21;
      |     ~~~~~~~~~~~~~^~~~~~~~~~
1 error generated.

Exemplul 3: Parametru const: funcția promite că doar citește

const int *note spune că media nu modifică notele. Dacă ai scrie note[0] = 10; în funcție, compilarea ar eșua.

#include <stdio.h>

double media(const int *note, int n) {
    int suma = 0;
    for (int i = 0; i < n; i++) {
        suma += note[i];
    }
    return (double)suma / n;
}

int main(void) {
    int note_ana[] = {9, 10, 8, 9};
    printf("Media Anei: %.2f\n", media(note_ana, 4));
    return 0;
}

Rezultat

Media Anei: 9.00

Greșeli frecvente

  • Încurci const int *p cu int *const p. Primul te lasă să muți pointerul, dar nu să schimbi valoarea; al doilea invers.
  • Folosești o variabilă const int ca dimensiune la un tablou global sau în case. În C nu este constantă de compilare; folosește enum, #define sau constexpr (C23).
  • Elimini const cu un cast și modifici obiectul. Dacă obiectul a fost declarat const, modificarea este comportament nedefinit.

Comenzi înrudite

  • constexpr: Declară o constantă cu valoare calculată la compilare, cu tip, care poate fi folosită ca dimensiune de tablou sau în static_assert.
  • #define: Definește o macro: un nume pe care preprocesorul îl înlocuiește cu textul dat, înainte ca programul să fie compilat.
  • Pointeri (& și *): O variabilă care păstrează adresa altei variabile; cu * citești sau modifici valoarea de la acea adresă.
  • enum: Definește un set de constante întregi cu nume, de exemplu zilele săptămânii sau stările unei comenzi.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: const

Ai o nelămurire despre utilizarea comenzii const sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.