C

Învață C: comenzi explicate cu exemple

84 de comenzi 18 categorii Comunitate & Q&A

C este limbajul în care sunt scrise nucleul Linux, sistemele de operare, interpretorul Python, SQLite și o mare parte din programele care rulează aproape de hardware. Este un limbaj mic și compilat: codul sursă este transformat de un compilator (gcc sau clang) într-un program executabil.

În C lucrezi direct cu memoria: tu alegi cât spațiu ceri (malloc), tu îl eliberezi (free) și tu răspunzi pentru fiecare pointer. Pe paginile de mai jos găsești tipurile de date, operatorii, structurile de control, tablourile și șirurile de caractere, pointerii, struct, funcțiile din stdio.h, string.h, stdlib.h, preprocesorul și noutățile din standardul C23.

Toate exemplele au fost compilate cu Clang, standardul C23 și avertismentele tratate ca erori (-std=c23 -Wall -Wextra -Wpedantic -Werror), apoi rulate; rezultatul afișat este cel real. Dacă vii din C++, vezi și secțiunea C++.

Bazele limbajului 6 comenzi

Operatori 3 comenzi

Structuri de control 5 comenzi

Funcții 4 comenzi

Tablouri și șiruri de caractere 3 comenzi

Pointeri 4 comenzi

struct, union și enum 4 comenzi

Memorie dinamică 4 comenzi

Intrare și ieșire (stdio.h) 7 comenzi

Fișiere și erori 5 comenzi

Șiruri și memorie (string.h) 10 comenzi

Utilitare (stdlib.h) 6 comenzi

Caractere, matematică și timp 5 comenzi

Durata de viață și vizibilitate 2 comenzi

Preprocesor 4 comenzi

Noutăți în C23 8 comenzi

Compilare și build 3 comenzi

Comportament nedefinit 1 comandă

Index complet de funcții, concepte și biblioteci C (Standard C23)

Consultați referința completă a limbajului C modern: tipuri de date primitive, operatori pe biți, pointeri și gestiunea memoriei dinamice, structuri de date compuse, funcții standard din stdio.h, string.h și stdlib.h, precum și noile caracteristici introduse în standardul ISO C23:

Bazele limbajului (6)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Conversii și cast Conversiile automate dintre tipuri și cum forțezi o conversie cu (tip): de exemplu împărțire cu zecimale între două întregi.
const Marchează o variabilă ca doar pentru citire: compilatorul oprește orice încercare de a o modifica.
main Funcția cu care începe orice program C: sistemul o apelează la pornire, iar valoarea returnată spune dacă programul a reușit.
sizeof Operatorul care spune câți octeți ocupă un tip sau o variabilă; calculat de compilator, rezultatul are tipul size_t.
stdint.h și limits.h Tipuri întregi cu dimensiune exactă (int32_t, uint8_t) și constantele cu valorile minime și maxime ale tipurilor (INT_MAX).
Tipuri de date (int, char, double) Tipurile de bază din C: întregi (char, short, int, long, long long), cu sau fără semn, și numere reale (float, double).

Operatori (3)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Operatori aritmetici (+ – * / % ++ –) Adunare, scădere, înmulțire, împărțire, restul împărțirii, atribuiri compuse și incrementare cu ++ / –.
Operatori pe biți (& | ^ ~ << >>) Lucrează direct cu biții unui întreg: steaguri (flags), măști, deplasări; folosiți la permisiuni, protocoale și hardware.
Operatori de comparație și logici (== && || ! ?:) Compară valori și combină condiții: rezultatul este 1 (adevărat) sau 0 (fals); && și || se opresc cât mai devreme.

Structuri de control (5)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
break, continue și goto break iese din buclă, continue trece la repetarea următoare, iar goto sare la o etichetă, folosit în C mai ales pentru curățenie la erori.
for Bucla cu contor: inițializare, condiție verificată înainte de fiecare pas și actualizare, toate pe un singur rând.
if / else Execută un bloc de cod doar dacă o condiție este adevărată, cu ramuri alternative pentru celelalte cazuri.
switch Alege una din mai multe ramuri după valoarea unui întreg, cu etichete case; fără break, execuția continuă în ramura următoare.
while și do-while Repetă un bloc cât timp o condiție este adevărată; do-while rulează blocul cel puțin o dată, apoi verifică.

Tablouri și șiruri de caractere (3)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Tablouri bidimensionale (matrice) Un tablou de tablouri: date așezate pe rânduri și coloane, accesate cu doi indici, m[rând][coloană].
Șiruri de caractere (char[]) În C, un șir de caractere este un tablou de char terminat cu caracterul nul ‘\0’, care marchează sfârșitul textului.
Tablouri (array) Un șir de elemente de același tip, așezate unul după altul în memorie și accesate prin index, de la 0.

Funcții (4)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Funcții și prototipuri Cum definești și declari funcții în C: tipul rezultatului, parametrii, prototipul și transmiterea argumentelor prin valoare.
Pointeri la funcții O variabilă care ține adresa unei funcții: o poți schimba, pune în tablouri sau trimite altor funcții (callback).
Recursivitate O funcție care se apelează pe ea însăși, cu o problemă mai mică la fiecare pas, până la un caz de bază.
Funcții variadice (stdarg.h) Funcții cu număr variabil de argumente, ca printf: le citești pe rând cu va_start, va_arg și va_end din stdarg.h.

Pointeri (4)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Aritmetica pointerilor Adunarea și scăderea pe pointeri se fac în elemente, nu în octeți: p + 1 arată spre următorul element din tablou.
Pointer la pointer (**) Un pointer care păstrează adresa altui pointer: util când o funcție trebuie să schimbe un pointer sau pentru tablouri de șiruri.
Pointeri (& și *) O variabilă care păstrează adresa altei variabile; cu * citești sau modifici valoarea de la acea adresă.
void * (pointer generic) Un pointer care poate păstra adresa oricărui tip de date, dar care trebuie convertit la un tip concret înainte de folosire.

Durata de viață și vizibilitate (2)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
extern Declară o variabilă globală definită în alt fișier (sau mai jos), ca să o poți folosi fără să creezi o copie nouă.
static Într-o funcție, variabila își păstrează valoarea între apeluri; la nivel de fișier, ascunde funcția sau variabila de celelalte fișiere.

struct, union și enum (4)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
enum Definește un set de constante întregi cu nume, de exemplu zilele săptămânii sau stările unei comenzi.
struct Grupează mai multe valori de tipuri diferite într-un singur tip nou, de exemplu numele, vârsta și orașul unei persoane.
typedef Dă un nume nou, mai scurt sau mai clar, unui tip existent: o structură, un pointer sau un tip de funcție.
union Ca un struct, dar toate câmpurile folosesc aceeași zonă de memorie, așa că la un moment dat păstrează o singură valoare.

Memorie dinamică (4)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
calloc Alocă memorie pentru un tablou de count elemente a câte size octeți și pune zero în toți octeții.
free Eliberează un bloc alocat cu malloc, calloc sau realloc, ca memoria să poată fi refolosită.
malloc Cere sistemului un bloc de memorie de mărimea dată, în timpul rulării, și returnează adresa lui sau NULL dacă nu reușește.
realloc Schimbă dimensiunea unui bloc alocat dinamic, păstrând conținutul; poate muta blocul la altă adresă.

Intrare și ieșire (stdio.h) (7)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
fgets Citește un rând întreg (cu tot cu spații) într-un tablou de caractere, fără să depășească dimensiunea dată.
getchar Citește un singur caracter de la intrarea standard; returnează EOF când intrarea s-a terminat.
printf Afișează text formatat pe ecran: un șablon cu specificatori (%d, %s, %.2f) completați cu valorile primite după el.
puts și putchar puts afișează un șir și trece la rând nou, putchar afișează un singur caracter; mai simple decât printf când nu formatezi nimic.
scanf Citește valori de la tastatură după un șablon (%d, %lf, %s) și le scrie la adresele primite; returnează câte valori a citit.
snprintf și sprintf Formatează text ca printf, dar îl scrie într-un tablou de caractere; snprintf nu depășește niciodată dimensiunea dată.
Specificatori de format (%d, %f, %s) Ce înseamnă %d, %u, %f, %e, %s, %c, %x, %zu și cum controlezi lățimea, zecimalele și alinierea în printf.

Șiruri și memorie (string.h) (10)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
memcpy Copiază n octeți dintr-o zonă de memorie în alta; zonele nu au voie să se suprapună.
memmove Copiază n octeți ca memcpy, dar funcționează corect și când sursa și destinația se suprapun.
memset Umple primii n octeți ai unei zone de memorie cu aceeași valoare, de obicei 0.
strcat și strncat Lipește un șir la sfârșitul altui șir aflat într-un tablou destul de mare.
strchr și strrchr Caută un caracter într-un șir: strchr găsește prima apariție, strrchr pe ultima.
strcmp și strncmp Compară două șiruri caracter cu caracter și spune dacă sunt egale sau care vine primul.
strcpy, strncpy și strdup Copiază un șir C într-un alt tablou (strcpy, strncpy) sau într-o zonă nouă alocată cu malloc (strdup).
strlen Numără caracterele unui șir C până la terminatorul ‘\0’, fără să-l includă.
strstr Caută prima apariție a unui subșir într-un șir și întoarce un pointer la ea sau NULL.
strtok Împarte un șir în bucăți (tokeni) după unul sau mai multe caractere separatoare, modificând șirul original.

Utilitare (stdlib.h) (6)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
atoi, atol și atof Transformă rapid textul de la începutul unui șir într-un număr, fără să semnaleze erori.
bsearch Caută rapid un element într-un tablou sortat (căutare binară) și întoarce un pointer la el sau NULL.
exit, atexit și EXIT_SUCCESS Oprește programul din orice funcție, cu un cod de ieșire; atexit înregistrează funcții de rulat la final.
qsort Sortează un tablou de orice tip, folosind o funcție de comparare scrisă de tine.
rand și srand Generează numere pseudo-aleatorii între 0 și RAND_MAX; srand alege punctul de pornire (seed).
strtol și strtod Transformă text în număr și îți spune unde s-a oprit citirea și dacă valoarea a depășit limitele.

Caractere, matematică și timp (5)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
assert Verifică în timpul rulării o condiție care trebuie să fie mereu adevărată și oprește programul cu un mesaj dacă nu este.
ctype.h (isdigit, isalpha, toupper…) Funcții care verifică ce fel de caracter ai (cifră, literă, spațiu) și care schimbă literele mari în mici și invers.
math.h (sqrt, pow, fabs…) Funcțiile matematice ale limbajului C: radical, putere, valoare absolută, logaritmi și trigonometrie, pe numere double.
round, floor, ceil, trunc și fmod Rotunjesc un număr real la întreg în moduri diferite și calculează restul împărțirii pentru numere reale.
time.h (time, difftime, mktime, strftime) Lucrul cu data și ora în C: momentul curent, diferența dintre două momente, structura struct tm și formatarea cu strftime.

Fișiere și erori (5)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
errno, perror și strerror errno păstrează codul ultimei erori a unei funcții de bibliotecă; perror și strerror îl transformă într-un mesaj citibil.
fopen și fclose Deschide un fișier pentru citire, scriere sau adăugare și returnează un FILE *; fclose îl închide și salvează datele rămase.
fprintf Scrie text formatat într-un fișier sau în stderr, cu același șablon ca printf.
fread și fwrite Scriu și citesc blocuri de octeți (tablouri, struct-uri) într-un fișier binar; fseek și ftell mută și arată poziția curentă.
fscanf Citește valori dintr-un fișier după un șablon, ca scanf; returnează câte câmpuri a citit sau EOF la final.

Preprocesor (4)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
#define Definește o macro: un nume pe care preprocesorul îl înlocuiește cu textul dat, înainte ca programul să fie compilat.
#if, #ifdef, #ifndef Compilare condiționată: preprocesorul păstrează sau elimină bucăți de cod în funcție de macro definite sau de valoarea lor.
#include Copiază conținutul unui fișier antet (.h) în locul liniei, ca funcțiile și tipurile declarate acolo să poată fi folosite.
Macro cu parametri Macro care primesc argumente, ca o funcție: textul lor este copiat în locul apelului, cu operatorii # și ## și argumente variabile.

Compilare și build (3)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Programe din mai multe fișiere (.c și .h) Cum împarți un program C în fișiere sursă (.c) și antete (.h), cum le compilezi separat și cum le legi într-un executabil.
Compilarea cu gcc și clang Cum transformi codul C într-un program executabil cu gcc sau clang și ce fac opțiunile folosite cel mai des.
make și Makefile make citește un Makefile și recompilează doar fișierele modificate, ca să nu scrii de fiecare dată comenzile de compilare.

Noutăți în C23 (8)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Atribute [[…]] Atributele C23 dau compilatorului informații în plus: rezultat care nu trebuie ignorat, funcție învechită, variabilă poate nefolosită.
bool, true, false Tipul pentru valori adevărat/fals. În C23, bool, true și false sunt cuvinte cheie, fără să mai incluzi stdbool.h.
constexpr Declară o constantă cu valoare calculată la compilare, cu tip, care poate fi folosită ca dimensiune de tablou sau în static_assert.
#embed Directiva C23 care pune conținutul unui fișier, octet cu octet, direct în program, de obicei într-un tablou.
nullptr Constanta C23 pentru pointerul nul, cu tip propriu (nullptr_t), mai sigură decât NULL sau 0.
static_assert Verifică o condiție la compilare: dacă este falsă, programul nu se compilează și apare mesajul tău.
ckd_add, ckd_sub, ckd_mul Adunare, scădere și înmulțire cu verificarea depășirii: funcțiile din stdckdint.h spun dacă rezultatul a încăput în tip.
typeof și auto typeof dă tipul unei expresii, iar auto deduce tipul variabilei din valoarea inițială. Ambele sunt standard din C23.

Comportament nedefinit (1)

Funcție / Concept / Directivă Descriere și Aplicabilitate Tehnică
Comportament nedefinit (undefined behavior) Situațiile pentru care standardul C nu spune ce se întâmplă: programul poate merge, poate da rezultate greșite sau se poate opri.
Comunitate & Schimb de cunoștințe

Discuții, Întrebări & Coduri C

Ai o întrebare legată de C, cauți o soluție sau vrei să împărtășești un fragment util de cod? Trimite mai jos contribuția ta.

💬

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.