C (programski jezik)

**C programski jezik** spada u proceduralne programske jezike koji je razvijen u ranim 70-im godinama 20. vijeka. Autor ovog programskog jezika je Dennis Ritchie, no značajan doprinos nastanku C-a dali su Ken Thompson kao autor programskog jezika B i Martin Richards, autor programskog jezika BCPL. Dennis Ritchie je stvorio ovaj programski jezik za rješavanje praktičnih problema kodiranja sistemskih programa i jezgre operativnog sistema UNIX, koji je praktički u cijelosti napisan u **C**-u.

Programski jezik **C** dosta se mijenjao tokom godina te je u više navrata neformalno i formalno standardiziran. Prva važnija verzija poznata je pod nazivom "K&R C", što je eng. kratica prezimena dvaju autora najpoznatijeg C priručnika "The C Programming Language" – Brian Kernighan i Dennis Ritchie. Prvo izdanje te vrlo sažeto i precizno pisane knjige iz 1978. godine ujedno je de facto standardiziralo jezik u 70-ima. Drugo izdanje iz 1988. godine opisuje "ANSI C", standard kojeg je 1983. godine definirao američki nacionalni institut za standardizaciju, a koji je i danas najbolje podržan. Aktualni ISO/IEC standard, skraćeno poznat kao "C99", podržava u cijelosti samo manji dio komercijalnih proizvođača softvera.

## Historija razvoja i verzije 
Prvobitni razvoj **C** programskog jezika započinje između 1969. i 1973. u AT&T Bell Labs, a po riječima Dennisa Ritchieja najkreativniji period bio je tokom 1972. Nazvan je **C** jer su mnoge od njegovih karakteristika potekle od ranijeg programskog jezika zvanog **B**.

Tokom 1980-ih, Bjarne Stroustrup zajedno s drugim istraživačima u Bell Labs proširuje **C** dodajući mogućnosti objektno orijentisanog programiranja, a naziv novog jezika postaje C++. Nažalost, ta 100%-na kompatibilnost naslijedila je i neke probleme koje programiranje u **C**-u nosi sa sobom.

## Standardizacija 
Svaki program napisan u C-u obično sadrži sljedeće elemente:

* **Preprocesorski dio** (npr. `#include &lt;stdio.h&gt;`) – Uključuje zaglavlja neophodna za osnovne funkcionalnosti ulaza i izlaza.
* **Definisanje varijabli** – Određivanje tipova i polja definisanosti varijabli koje se koriste u funkcijama.
* **Glavna funkcija main()** – Mora postojati u svakom C programu.
* **Ostale funkcije** – Definišu se prema vrsti ulaznih i izlaznih parametara.

## Programski primjer 
```cpp
#include 

int main() {
    int a, b, c;
    scanf("%d %d", &a, &b);
    c = a + b;
    printf("%d\n", c);
    return 0;
}
```

## Napredne tehnike programiranja u C-u 
C omogućava nekoliko naprednih tehnika koje se često koriste u optimizaciji i sistemskom programiranju.

### Rad sa pokazivačima 
```cpp
#include 

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int a = 5, b = 10;
    swap(&a, &b);
    printf("a = %d, b = %d\n", a, b);
    return 0;
}
```

### Korištenje struktura i unija 
```cpp
#include 

struct Student {
    char ime[50];
    int godine;
    float prosjek;
};

int main() {
    struct Student s1 = {"Marko", 22, 8.5};
    printf("Ime: %s, Godine: %d, Prosjek: %.2f\n", s1.ime, s1.godine, s1.prosjek);
    return 0;
}
```

## Naučna istraživanja i uticaj C jezika 
C programski jezik je temelj mnogih istraživanja u oblasti računarskih nauka. Naučnici su proučavali njegovu efikasnost, sigurnosne aspekte i uticaj na razvoj drugih jezika. Ključna istraživanja uključuju:

* **Efikasnost C jezika** – Mnoge studije su pokazale da C omogućava visoke performanse zahvaljujući niskonivou kontroli memorije i direktnom pristupu hardveru.
* **Sigurnosni izazovi** – Naučni radovi analiziraju kako ručno upravljanje memorijom može dovesti do sigurnosnih ranjivosti (poput buffer overflow napada).
* **Uticaj na moderne jezike** – Istraživanja potvrđuju da su mnogi moderni jezici (Java, C#, Rust) inspirisani C-om, ali uvode poboljšanja u sigurnosti i upravljanju memorijom.

Danas se C koristi za razvoj operativnih sistema, kompajlera, ugrađenih sistema, te za programske aplikacije koje zahtevaju visoke performanse.

## Zaključak 
C programski jezik ostaje ključni alat u programerskom ekosistemu, od fundamentalnih softverskih sistema do najnovijih inovacija u softverskom inženjerstvu. Unatoč izazovima, njegova efikasnost i fleksibilnost čine ga nezaobilaznim u modernom računarstvu.

Kategorija:Programski jezici
Kategorija:Američki izumi