C to ogólnego przeznaczenia, proceduralny język programowania, który miał znaczący wpływ na rozwój wielu nowoczesnych języków programowania. Zaprojektowany z myślą o wydajności i elastyczności, jest powszechnie używany do programowania systemowego, rozwijania systemów operacyjnych oraz tworzenia oprogramowania aplikacyjnego. C zapewnia niski poziom dostępu do pamięci i umożliwia manipulację bitami, co czyni go preferowanym wyborem do pisania oprogramowania krytycznego pod względem wydajności.
C został opracowany na początku lat 70. przez Dennisa Ritchie w Bell Labs jako ewolucja języka B, który był inspirowany BCPL i ALGOL. Początkowo był przeznaczony do programowania systemowego na systemie operacyjnym Unix, który również powstał w Bell Labs. Projekt języka koncentrował się na zapewnieniu wysokiego poziomu abstrakcji nad językiem asemblera, jednocześnie zachowując wydajność programowania niskopoziomowego.
Pod koniec lat 70. C zyskał szeroką akceptację w społeczności programistycznej, a publikacja "The C Programming Language" autorstwa Briana Kernighana i Dennisa Ritchie w 1978 roku znacząco przyczyniła się do jego popularności. Pierwsza wersja standaryzowana, znana jako C89 lub ANSI C, została przyjęta przez Amerykański Narodowy Instytut Standardów (ANSI) w 1989 roku. Międzynarodowa Organizacja Normalizacyjna (ISO) później przyjęła ją, co zaowocowało ISO C99 w 1999 roku, które wprowadziło kilka nowych funkcji, takich jak funkcje inline i tablice o zmiennej długości. Najnowszy główny standard, C11, został opublikowany w 2011 roku, a C18, wydanie poprawkowe, ukazało się w 2018 roku.
C pozostaje jednym z najczęściej używanych języków programowania na świecie, szczególnie w programowaniu systemowym, systemach wbudowanych i aplikacjach o wysokiej wydajności. Jego składnia i koncepcje wpłynęły na wiele innych języków, w tym C++, C#, Javę i Objective-C. Jego ciągła aktualność widoczna jest w systemach operacyjnych (Linux, Windows), programowaniu sieciowym, systemach wbudowanych oraz różnych zadaniach obliczeniowych o wysokiej wydajności.
C pozwala na bezpośrednią manipulację pamięcią za pomocą wskaźników. Na przykład:
int x = 10;
int *p = &x; // Wskaźnik p przechowuje adres x
C wspiera programowanie strukturalne poprzez funkcje, co umożliwia modularność kodu. Prosta definicja funkcji wygląda tak:
void greet() {
printf("Witaj, świecie!\n");
}
C zawiera różne struktury przepływu sterowania, takie jak if, switch, for, while i do-while, które ułatwiają podejmowanie decyzji.
if (x > 0) {
printf("Liczba dodatnia\n");
}
C ma kilka wbudowanych typów danych: int, char, float, double itd. Obsługuje również typy danych zdefiniowane przez użytkownika za pomocą struktur.
struct Point {
int x;
int y;
};
C zawiera bogaty zestaw bibliotek do operacji wejścia/wyjścia, manipulacji łańcuchami znaków i obliczeń matematycznych.
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C pozwala na jawne rzutowanie typów, co jest przydatne do konwersji między typami.
double pi = 3.14;
int intPi = (int)pi; // intPi będzie równe 3
C obsługuje typy wyliczeniowe do tworzenia typów niestandardowych.
enum Color { RED, GREEN, BLUE };
C zawiera dyrektywy preprocesora, takie jak #define, #include, które obsługują kod przed kompilacją.
#define PI 3.14
C pozwala na deklaracje zmiennych w określonym zakresie, co zwiększa enkapsulację.
{
int temp = 5; // temp jest ważne tylko w tym bloku
}
C nie obsługuje przeciążania funkcji jak C++, ale pozwala na domyślne argumenty poprzez ręczną implementację.
int add(int a, int b) {
return a + b;
}
C wymaga kompilatora do przekształcenia kodu źródłowego w kod maszynowy. Najpopularniejsze kompilatory to GCC (GNU Compiler Collection), Clang i MSVC (Microsoft Visual C++).
Aby skompilować program w C, można zazwyczaj użyć polecenia:
gcc -o myprogram myprogram.c
To kompiluje myprogram.c
do pliku wykonywalnego o nazwie myprogram
.
Kilka IDE wspiera programowanie w C, takich jak:
Te IDE oferują funkcje takie jak podświetlanie składni, narzędzia do debugowania i zarządzanie projektami.
C jest szeroko stosowany w różnych dziedzinach, w tym:
C jest często porównywany z innymi językami programowania, ponieważ dzieli podobieństwa i stanowi fundament dla wielu:
C można łatwo przetłumaczyć na języki, które obsługują konstrukcje programowania proceduralnego i optymalizacje niskopoziomowe. Podczas tłumaczenia kodu C na język wyższego poziomu, programiści powinni zwrócić uwagę na różnice w zarządzaniu pamięcią, ponieważ języki wyższego poziomu często mają garbage collection.
Kilka narzędzi do tłumaczenia źródło-do-źródła może pomóc w konwersji kodu C na inne języki, w tym: