Sunteți pe pagina 1din 4

c-program-writing-with-Jamsa-book

Created: 2022-03-06 02:19

ToC
1. c-program-writing-with-Jamsa-book
1. ToC
1. Compile (Alt + F9)
2. Make (F9)
3. Run (Ctrl + F9)
4. TurboC++
5. CodeBlocks
2. References

Compile (Alt + F9)


se pre-proceseaza sursele conform directivelor de preprocesare
acestea incep cu # (#include, #define) si indica ca anumite manipulari (includere de fisiere, schimb de
simboluri) se fac INAINTE de compilare
se compileaza sursele in fisiere de tip obiect (.obj, .o)

Make (F9)
se fac legaturile dintre fisierele obiect din proiect cu fisierele necesare din alte librarii (.lib, .a) pentru a
produce fisierul executabil (.exe)

Run (Ctrl + F9)


se incarca in memorie bibliotecile comune necesare (shared libraries: .dll, .so) ← programul depinde
de acestea
se executa instructiunile din fisierul program (.exe)

adauga #include <conio.h> in header si functia getch(); inainte de return 0; pentru a pastra output-ul
in DosBox (press any key to return).
adauga #include <unistd.h> in header si system("cls"); ca prima functie in blocul main pentru a sterge
output-ul anterior (clear screen).
in Borland TurboC++ e suficient sa incluzi fie system("cls"); fie clrscr(); fara alt header (→ dar e
considerata invalida in C99, care solicita specificarea explicita a headerului unistd.h; TC7, pe de
alta parte, nu recunoaste unistd.h.)
TurboC++
TC++ boilerplate code

#include <stdio.h>

#include <conio.h>

// declare your variables here

int main(void)

system("cls");

// type the code for your functions here

getch();

return 0;

CodeBlocks
CodeBlocks boilerplate code

#include <stdio.h>

#include <conio.h>

#include <unistd.h>

// declare your variables here

int main(void)

system("cls");

// type the code for your functions here

getch();

return 0;

Nota: se poate fi folosi fie:

system("cls");

fie:
clearscr();

atentionarea 'main is not int' se refera ca functia main() trebuie intotdeauna sa returneze o valoare int
in final

de aceea, in ultima linie inainte de closing bracket adauga return 0; -- return value for main() being 0;

in loc de void main(void) (sintaxa C89), foloseste versiunea moderna int main(void), pentru a evita
erorile in CodeBlocks (daca compilerul este setat pe C99/C11)

facând asta nu mai este obligatoriu sa pui return 0; cum am spus in paragraful anterior (dar e
cosiderata good practice “to always return a specific value” → “strong typed language”)
SAU setezi CodeBlocks sa ruleze cu -std=C89

fisierele .c -- fisierele cu codul sursa (create de programator)


fisierele .h -- fisiere header
fisierele .obj -- necesare compilatorului pentru producerea fisierelor finale .exe
contin cod masina, dar nu sunt complete, contin doar instructiunile din fisierul .c dar nu si
functiile apelate extern, cum ar fi printf(), care trebuie apelata din headerul stdio.h (STL)
legatura intre fisierul .obj si functiile apelate extern e realizata de editorul de legaturi (linkerul)
fisierele .exe -- fisierele executabile ale programelor realizate

tipul unei variabile defineste tipul (sic) de valori pe care aceasta le poate avea si setul de operatii pe
care programul le poate executa asupra lor
patru tipuri in C: int, char, float si double
se pot atribui tipurile variabilor on the fly in program (schimbat un int intr-un float si viceversa)
schimbarea unui int intr-un float se face fara probleme, dar schimbarea unui float intr-un int poate
crea probleme: valoarea zecimala va fi trunchiata (eliminata) sau rotunjita, in functie de compilator
pentru preintâmpinarea unor astfel de probleme, C ofera functii matematice (vezi ceil sau floor)

daca o aplicatie are nevoie sa lucreze cu valori octale sau hexadecimale, atunci se pune un 0 in fata
numarului pentru octal (in baza 8), si un 0x inaintea numarului pentru hexadecimal (in baza 16)

valorile de “depasire” (overflow) apar atunci când o valoare depaseste intervalul pe care il poate avea
de ex, int poate avea valori intre -32768 si 32767
daca se atribuie o valoare care depaseste una din cele doua extreme, va aparea o situatie de depasire
(overflow)
NOTA: la exemplificarea pentru situatia de depasire, exemplul lui Jamsa mentioneaza un output care
nu corespunde la rularea in CodeBlocks. Presupun cauza ca fiind platforma pe care sunt rulate
exemplele, in cazul lui Jamsa platforma Win veche (anii '90, DOS, x16?), in cazul meu platforma
moderna Windows 10 x64. La testarea codului in TurboC++ (DosBox) datele de iesire sunt intr-adevar
cele mentionate de Jamsa. De verificat explicatiile in aceasta problema in manualele recente (si
exemplele alese de autorii moderni).

NOTA: in viitor de revizuit sectiunea despre tipurile de variabile si despre valorile care pot fi stocate in
diferitele tipuri. E foarte usor sa desemnezi o variabila ca fiind int si apoi, când acea variabila
depaseste 32767 (limita) sa te miri de ce apar erori -- pentru valori care depasesc poti folosi
unsigned, care foloseste si bitul de atribuire de semn si poate stoca valori mai mari

References
1. https://www3.ntu.edu.sg/home/ehchua/programming/cpp/c0_Introduction.html

S-ar putea să vă placă și