Ebben a cikkben szeretném mindenki számára érthetővé tenni a C nyelv alapjait. A szóban forgó, és az ezt követő alkotások érthetőségét kifejezetten javítja, ha tisztában vagy a programozással kapcsolatos alapfogalmakkal, neadjisten a Turbo Pascallal. Na, akkor csapjunk a lovak közé!

A C nyelv gyökerei a 60-as évekre nyúlnak vissza, mikor is Martin Richards megalkotta a BCPL-t, majd ezt továbbfejlesztve Ken Thompsonnak köszönhetően megszületett a B, amiből Dennis Ritchie megcsinálta a C-t, ami mára annyira befutott, hogy ebben írják a UNIX-ot, újabban az MS-DOS-t, C-ben készült a DOOM, és még sok-sok egyéb program. A nyelv történetéből ennyit, úgysem érdekel senkit.

A C a magasszintű fejlesztői környezet használatának egyszerűségét, és az assembly előnyeit ötvözi. Előnyei közül kiemelendő a lefordított program gyorsasága, a nyelv egyszerű struktúrája, világos és kényelmes.

A C nyelv függvények halmaza. Maga a főprogram is (main()) egy függvény. A függvény az eljáráshoz hasonló dolog, ugyanúgy kapja meg a vezérlést, és a visszatérés módja is ugyanaz. A függvény, ahogy az eljárás is tetszőleges számban és mélységben hívhat meg újabb függvényeket, a függvények teljesen egyenrangúak, bármelyik meghívhatja bármelyiket, akár önmagát is (rekurzió), sőt akár a már említett main() függvényt (a főprogramot) is. A függvénynek tetszőleges számú bemenő paramétere lehet, de az eljárással ellentétben visszatérési értéke csak egy.

Így néz ki egy függvény általánosságban:

Függvénynév(paraméterlista) /* Egyéb nyalánkságok */
/* a paraméterek típusának megadása */
/* további függvények */
{ /* függvény kezdete, ugyanaz, mint a Turbo Pascalnál a Begin*/
belső változók +
utasítások
return( visszatérési érték); 
/*a visszatérési értéket leteszi a stack-be, majd visszatér a hívóhoz*/
} /*függvény vége ugyanaz, mint a Turbo Pascalnál az end*/

Akkor kezdjük a magyarázkodást!

Amint azt remélem észrevettétek, a kommenteket (megjegyzés) '/*' és '*/' jelek közé kell zárni. Nagyon fontos hogy a kommentekben nem szabad ékezetet használni, ahogy én, mert a compiler (fordító) igencsak zokon veszi. A paraméterek és belső változók megadásánál a következő alaptípusokat használhatjuk. (Természetesen mi is csinálhatunk típusokat, az alábbi alaptípusok felhasználásával, de ezt majd később).
 

Típus
Hossz
Kapacitás
char
1 byte
-27 (-128)---27-1 (128)
unsigned char
1 byte
0--28-1( 255)
short
2 byte
-215 (-32768)---215-1 (32767)
unsigned short
2 byte
0--65535
int
2 byte
-215 (-32768)---215-1 (32767)
unsigned int
2 byte
0--65535
long
4 byte
-231---231-1
unsigned int
4 byte
0--232-1
float
4 byte
10-38--1038
double
8 byte
10-307--10307

Nyilván mindenkinek feltűnt, hogy az int és a short típusok megegyeznek. Ez csak a látszat, ugyanis az int típus mindig a legnagyobb együtt címezhető memóriablokk, ami a mai gépeknél általában 4 byte, de ezt ritkán szoktuk kihasználni. Talán az is feltűnt valakinek (remélem), hogy nem létezik string (szöveg) típus, de még hasonló sem. Ennek oka az, hogy a C egy matematikai nyelv, nemigen komálja azokat a dolgokat, amik nem számok. Természetesen tudunk stringeket létrehozni, de ez még ráér.

A paraméterek típusait egyszerű megadni, elég leírni a típust, és utána felsorolni az adott típusba tartozó paramétereket. Pl:

int a,b,c;

A belső változók megadása, formálisan ugyanúgy történik, mint a paraméterek meghatározásakor, azzal a különbséggel, hogy itt rögtön értéket is tudunk adni a változóinknak. Pl.:

int s=10,l=9;

float tort=0.99;

Az utasításokat majd szép lassan megismerjük, egyelőre csak annyit, akár a Turbo Pascalnál, minden utasítás végére pontosvesszőt kell tenni. A return utasítással adunk visszatérési értéket a függvényünknek, ennek típusa alapértelmezés szerint int, de ha ez nem felel meg, a függvénynév előtt megadhatjuk a kívánt típust. A függvény elindítása a következőképpen történhet:

változó=függvénynév(paraméterek), vagy függvénynév(paraméterek), ha nincs visszatérési értéke.

Miután már mindenkit sikerült kiábrándítani, és csak a legbátrabb, legkitartóbb, legtürelmesebb olvasók látják e sorokat (a többiek bizonyára továbblapoztak), fáradozásuk jutalmazásaként leközlök egy dögös C programot, amely a legmodernebb digitális szemvizsgáló szalonokban használatos.

Íme:

#include <stdio.h>
int main(void)
{
printf("Ha ezt a sort el tudja olvasni, nincs szüksége szemüvegre\n");
return(0);
}

Ha a program elindítása után valaki nem látna semmit, vegye fel a nagymama szemüvegét, ha akkor sem lát, akkor kettőnk közül valaki elgépelt valamit.

Az ominózus program egyetlen függvényhívásból áll, névszerint PRINTF, amely egy adott stringsorozat kiírását végzi. A szöveg végi \n nem íródik ki, mert ez egy parancs a függvénynek, mégpedig azt jelenti, kezdj új sort. A további parancsokkal a következő számban fogunk megismerkedni, ha még egy percig itt gubbasztok, kifolyik a szemem.