UNIX, Linux, Programare, Scripting, Retele
unix, linux, programare, script, hosting, server, retele
Lista Forumurilor Pe Tematici
UNIX, Linux, Programare, Scripting, Retele | Reguli | Inregistrare | Login

POZE UNIX, LINUX, PROGRAMARE, SCRIPTING, RETELE

Nu sunteti logat.
Nou pe simpatie:
barbyy
Femeie
19 ani
Bucuresti
cauta Barbat
23 - 80 ani
UNIX, Linux, Programare, Scripting, Retele / Cursuri / [Curs] C - Lectia 01 - Despre compilator  
Autor
Mesaj Pagini: 1
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Avand in vedere ca e prima lectie din curs, sa va spun despre ce e vorba. Cursul il fac pe un sistem UNIX (FreeBSD 6.1) si folosesc ca si compilator cc. Nu e obligatoriu sa folositi si voi acelasi sistem si acelasi compilator, dar e de preferat sa aveti la dispozitie un shell UNIX pentru a nu aparea pe parcurs probleme de incompatibilitate. In principiu nu ar trebui sa apara probleme daca folositi ca sistem de operare orice alt sistem UNIX sau UNIX-like sau daca in loc de cc folositi gcc.
Daca singurul sistem de operare care il aveti la dispozitie e un Windows aveti doua variante... fie va faceti rost de un LiveCD cu care rulati Linux pe perioada testelor fie va faceti un cont la arbornet.org (sau oriunde altundeva puteti) si faceti testele "remote".

Pentru prima lectie avem nevoie de sursa unui program simplu. Cel mai simplu program (corect) posibil este urmatorul:

Code:

int main(){
        return 0;
}

Ce face programul ? Absolut nimic. Si prin nimic inteleg: nu accepta nici un fel de date de intrare si (la prima vedere) nu da nici un fel de date de iesire. Intram mai in amanunt mai tarziu, momentan sa vedem ce face un compilator.

Compilatoarele sunt de multe feluri fiecare cu avantajele si dezavantajele lui. Probabil ati auzit de cele mai comune compilatoare sub UNIX, cc, CC, gcc, g++ sau altele. Ce fac compilatoarele astea ?
Ca sa intelegeti ce fac compilatoarele, intru putin in dedesubturile programelor. Un program este facut in cod masina. Adica, un cod care il intelege doar sistemul de operare, un cod in care fiecare caracter (octet) reprezinta ceva, o instructiune, ceva ce trebuie facut. Daca deschideti un executabil cu un editor de texte obisnuit va dati seama despre ce vorbesc...
Codul masina e destul de greu de inteles pentru oamenii de rand si foarte greu de depanat, asa ca s-au facut limbaje de programare. Limbajele de programare sunt niste reguli de compozitie care puse cap-la-cap pot fi prelucrate de un alt program (compilator) pentru a fi transformate din cuvinte usor de inteles in cod masina. Primul limbaj de programare care a aparut, limbajul cel mai apropiat de codul masina, este limbajul de asamblare. Limbajul de asamblare este cel mai "brut" limbaj posibil... adica atunci cand programati in limbaj de asamblare lucrati direct cu registrii procesorului, cu intreruperile BIOS (sau apelurile de sistem in UNIX), de fapt... vorbiti pur si simplu cu procesorul si componentele care le aveti in PC.
Oricat de rapid si apropiat de codul masina ar fi limbajul de asamblare, este totusi greoi. Chiar daca este mult mai usor de inteles decat codul masina, trebuie multe cunostinte de functionare interna a CPU-ului pentru a putea programa in limbaj de asamblare. Astfel, s-au facut alte limbaje de nivel inalt (BASIC, Fortran, Pascal, etc). Limbajele de nivel inalt au avantajul ca inteleg ce vrem noi sa spunem chiar daca nu vorbim direct cu procesorul si chiar daca spunem doar 2 cuvinte in loc de o pagina de instructiuni de genul jne, mov, push etc. De fapt, ce fac limbajele de nivel inalt ? Asta urmeaza sa vedem mai departe.
Limbajele de nivel inalt nu valoreaza nimic fara un compilator. Compilatorul este cel care da putere limbajului. A invata un limbaj de programare e ca si cum ati invata o limba straina. E un lucru foarte util mai ales daca e vorba de limba engleza sau franceza dar e complet inutil sa stii o limba straina daca nu exista o persoana care sa asculte si sa inteleaga ceea ce spui. In cazul calculatoarelor, "persoana" care intelege si aplica ceea ce spunem este compilatorul. Un compilator ia informatia care o dam intr-o anumita forma (adica scrisa intr-un limbaj de nivel inalt) si o transforma intr-un limbaj necunoscut noua... transforma codul dat de noi in Fortran, C, Pascal, Basic in limbaj de asamblare.
Deci, ca sa tragem o concluzie, un compilator al unui limbaj de nivel inalt ia codul scris de noi si il transforma intr-un cod echivalent scris in limbaj de asamblare. Asta ar fi prima faza prin care trece un program... orice program ati scrie, in orice limbaj, inainte de a-l putea rula este "translatat" in limbaj de asamblare.
Al doilea pas care il face compilatorul e sa ia codul translatat si din el sa genereze un fisier obiect care poate fi inclus mai apoi intr-un executabil. In UNIX fisierele obiect le recunoasteti dupa extensia .o. Stiu, peste tot ati citit ca in UNIX nu conteaza extensia, dar ca regula toate fisierele obiect au extensia .o.
Al treilea pas care il face compilatorul e sa ia fisierul obiect generat, si impreuna cu alte fisiere obiect (daca sunt specificate) sa formeze un program executabil, acesta fiind ultimul pas.

Probabil, cei mai experimentati, stati si va intrebati "Cum naiba face atatia pasi ? ca eu ii dau comana si imi da executabilul..." Aveti dreptate. Orice compilator nou mascheaza tot procesul de compilare si afiseaza doar rezultatul final, dar este important sa intelegeti toate etapele prin care trece un program de la creerea lui pana la punerea in utilizare.
OK, acum ca ati inteles (sper) ideea de compilare sa facem si cateva exemple sa vedem concret cum se comporta compilatorul:

Compilare standard

Code:

bash2-2.05b$ cat l1.c
int main(){
        return 0;
}
bash2-2.05b$ cc l1.c -o l1
bash2-2.05b$ ./l1
bash2-2.05b$

* l1.c este fisiul care contine codul prezentat mai sus
Ce am facut ? Prima data am folosit comanda cat care imi arata continutul fisierului l1.c. Nu e obligatorie... am facut-o doar pentru a intelege "cine" e l1.c
apoi am rulat comanda cc l1.c -o l1. cc este compilatorul standard in UNIX. In FreeBSD si in majoritatea distributiilor de Linux, cc este de fapt un alias pentru gcc (GNU C Compiler). Am apelat comanda cc si i-am dat ca parametru fisierul l1.c (fisierul sursa) si -o l1 care ii spune compilatorului sa puna rezultatul final in fisierul l1.
Compilarea a decurs fara probleme, am rulat fisierul rezultat ( ./l1 ) care nu a facut nimic (dupa cum v-am spus si mai sus) si acum suntem din nou fata-in-fata cu promptul.

Bun, hai sa trecem mai departe sa vedem concret ce s-a intamplat. Vom forta compilatorul sa ne arate fiecare pas care il face.

Primul pas

Dupa cum am spus, primul pas este "transformarea" codului C in limbaj de asamblare. Ca sa fortam compilatorul sa ne arate acest pas, folosim parametru -S care ii spune sa salveze sursa in limbaj de asamblare iar apoi sa se opreasca (adica nu compileaza programul). Sa vedem ce iasa:

Code:

bash2-2.05b$ cat l1.c
int main(){
        return 0;
}
bash2-2.05b$ cc -S l1.c
bash2-2.05b$ cat l1.s
        .file   "l1.c"
        .text
        .p2align 2,,3
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        addl    $15, %eax
        addl    $15, %eax
        shrl    $4, %eax
        sall    $4, %eax
        subl    %eax, %esp
        movl    $0, %eax
        leave
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 3.4.4 [FreeBSD] 20050518"
bash2-2.05b$

Dupa cum vedeti, am folosit din nou comanda cat pentru a vedea continutul fisierului l1.c. Apoi am executat comanda cc -S l1.c care a luat fisierul l1.c (sursa programului) si a generat sursa echivalenta in limbaj de asamblare care a salvat-o in fisierul l1.s. Din nou am folosit comanda cat pentru a vedea continutul fisierului l1.s (daca nu intelegeti nimic, nu-i nici o problema... foarte probabil nu veti avea nevoie de asa ceva niciodata).

Al doilea pas

Al doilea pas in compilarea programului presupune sa luam sursa generata (l1.s) si sa creem un fisier obiect. Pentru asta folosim compilatorul cc cu parametrul -c. Mai jos vedeti exemplul:

Code:

bash2-2.05b$ cc l1.s -c
bash2-2.05b$ ls
l1.c  l1.o  l1.s
bash2-2.05b$ file l1.o
l1.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (FreeBSD),
not stripped
bash2-2.05b$

Ce am facut ? Am dat comanda cc l1.s -c care a preluat fisierul l1.s (care contine programul in limbaj de asamblare) si am generat fisierul obiect ( parametrul -c ). Dupa cum vedeti, a aparut fisierul l1.o care il putem include intr-un alt program sau il putem trece prin faza de link-are, adica de creare a programului. Am folosit comanda file pentru a verifica tipul fisierului. Rezultatul ne confirma ca este un fisier ELF 32-bit LSB reloctable, adica un fisier obiect.

Al treilea pas - ultimul

Si, intr-un final, folosim din nou comanda cc pentru a genera fisierul executabil din fisierul l1.o. Asta se face in felul urmator:

Code:

bash2-2.05b$ cc l1.o -o l1
bash2-2.05b$ ls
l1*   l1.c  l1.o  l1.s
bash2-2.05b$ file l1
l1: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD),
for FreeBSD 6.1, dynamically linked (uses shared libs), not stripped
bash2-2.05b$

Ce am facut ? Am apelat comanda cc l1.o -o l1 care a preluat fisierul l1.o si a creat un executabil caruia i-a dat numele l1. Daca nu specificam -o l1 compilatorul salva executabilul cu numele a.out. Dupa cum se poate vedea, din nou am folosit comanda file care ne arata de data asta ca fisierul este de tipul ELF 32-bit LSB executable, adica un "executabil cu acte in regula".

Rezumat

1. Un compilator este un program care ia codul sursa scris de noi intr-un limbaj de nivel inalt (in cazul nostru C) si il transforma intr-un cod sursa echivalent in limbajul de asamblare care apoi este transformat intr-un fisier obiect care este apoi inclus intr-un executabil scris in cod masina.
2. Pentru a studia fiecare pas care il face compilatorul putem folosi parametrii -S pentru a salva sursa in limbaj de asamblare si -o pentru a salva fisierul obiect inainte ca acesta sa fie inclus intr-un fisier executabil.
3. Pentru a ne usura treaba, compilatoarele moderne ne dau direct executabilul facand restul fazelor de compilare transparente pentru utilizator.
4. Chiar daca e mult text, compilarea nu are nimic mistic sau filosofic in ea si e la mintea oricui


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
!_30
near connection ..

Din: nowhere ?
Inregistrat: acum 18 ani
Postari: 47
Am citit cu atentie timp de jumate de ora , si pot sa ma mandresc , ca desi m-am mai intors la randurile anterioare neintalegand unele chestiii , am inteles tot , nu glumesc,si cursul nr.1 a fost super interesant !

Bravo , next


_______________________________________


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Daca intelegeai din prima te dadeam afara de la curs
Ma bucur ca ti-a placut... astept sa vina si restul lumii sa-si dea cu parerea sa vad ce nu au inteles si probabil peste vreo 2-3 zile trec la urmatoarea lectie.
Oricum, chiar daca mai postez o lectie sau doua subiectul nu il inchid decat peste vreo saptamana cand vine Sad_Dreamer de la mare. Zicea ca vrea sa invete C si ar fi frumos sa-l asteptam si pe el


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
Gheorghe
IQ 10011010

Din: Tokyo
Inregistrat: acum 18 ani
Postari: 20
Bun imi place subiectul am trecut acum fugitiv peste el imi place ca este prezentat cum se compileaza pe FreeBSD 6.1 Maine dimineata am sa il citesc mai atent, nelamuririle am sa le scriu.

Bravo pt idee !


_______________________________________
Ai RTFM, ai parte !

pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Mersi ! Astept nalamuriri daca sunt. Daca nu, in zilele ce urmeaza trecem la lectia nr. 2

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
suri
Pe lista neagră

Din: vizuina
Inregistrat: acum 18 ani
Postari: 92
Eu am citit si am inteles tot, deoarece stiam     operabilus insa a explicat foarte bine.

Eu as vrea sa va spun (pe scurt, deoarece banuiesc ca operabilus va dezvolta in cursurile viitoare, dar nu va strica sa aveti o idee) de ce compilatorul face mai multi pasi.

Orice executabil este format din mai multe bucatele, numite module. Fiecare functie este compilata drept modul separat. In afara de astea, exista un modul pentru programul principal. Toate aceste module sunt de fapt independente unele de altele si se afla in fisierele "obiect", de care vorbea operabilus, sau in biblioteci de module obiect, ex. <stdio.h>  Alocarea adreselor in fiecare modul incepe de la 0.

Nu este deloc obligatoriu ca toate modulele sa fie generate dintr-un singur fisier sursa, desi la programele mici asa se face, ca este comod. Deci primii doi pasi genereaza modulele obiect.

In al treilea pas modulele obiect trebuie montate in executabil. Ele pot fi montate unul dupa altul sau intr-o structura arborescenta. Adresele de inceput nu mai pot fi 0, iar adresele punctelor de comunicatie intre module ("adrese globale", FAR) trebuiesc calculate in functie de pozitia modulului in sir sau arbore. Acest al doilea pas  se numeste editare de legaturi sau linkeditare si este facut de programul linkeditor.

In sens larg spunem "compilare" la toti pasii, insa in realitate este vorba de "compilare" + "editare de legaturi".

Veti spune: "Bine, dar de ce asa de complicat ?"  D'aia !   
Sa nu credeti ca se poate face un program dintr-un singur modul !
Cand voi scrieti fopen sau fprint de fapt apelati modulul de deschidere a unui fiser, respectiv modulul de scriere. Sunt necesare, nu ?  Dar le-ati scris ?  Nu !  Le-au scris cei care au facut compilatorul si vi le dau "dea gata" in <stdio.h>, de unde linkeditorul le va lua si le va incorpora executabilului vostru.

Daca aveti nelamuriri...   


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
salieri
Newbi

Din: Sufragerie
Inregistrat: acum 18 ani
Postari: 8
Mi se intampla ca de multe ori cand compilez un program simplu in Borland C++ cu interfata vizuala, programul efectiv se blocheaza, iar la sfarsit imi da un mesaj de eroare cu niste adrese in limbaj de asamblare (sper ca m`am exprimat corect). Iar alta data merge perfect. Care ar fi problema? Daca era bug, ar fi trebuit sa imi dea de fiecare data eroare

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Problema e probabil la compilator. Nu stie sa adauge automat librariile necesare sau "se incurca" in timp ce o face. Normal nu e suficient sa adaugi headerele necesare ca sa ruleze programul... daca adaugi un header trebuie adaugata si libraria corespunzatoare headerului respectiv. De obicei IDE-urile de windows fac treaba in mod transparent si userul nu stie ca, de fapt, se adauga si alte librarii in programul creat. Daca ai mai instalat o versiune mai veche a compilatorului pe calculator e posibil ca la unele librarii sa apara erori... in configuratia IDE-ului apare aceeasi librarie in doua locuri. Bine, asta e doar o presupunere. Motivele pot fi multe si bizare.
Nu am lucrat cu borland de foarte mult timp dar incearca sa compilezi si cu Dev-C++. Il folosesc la job ca si compilator pentru programe marunte si merge super. Il poti downloada de aici:
Eventual, cand iti mai da eroarea posteaza aici sa vad despre ce e vorba... poate reusesc sa imi dau seama.


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
zamolxe
Newbi

Inregistrat: acum 18 ani
Postari: 12
Cursul mi s-a parut interesant si foarte frumos, desi stiam despre toate astea.
Limbajul ASM nu este greu, eu am inceput un sistem de operare (unu mic gen MSDOS), dar putin visual, si mam blocat la Sound si la inca o chestie si nu am mai continuat. In fine,
sper sa postezi cursuri si mai interesante.


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Incerc... desi, dupa cum vezi lumea abia daca le viziteaza.

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
suri
Pe lista neagră

Din: vizuina
Inregistrat: acum 18 ani
Postari: 92
http:// www. arbornet.org/  - dead ?

"M-NetFreeBSD shells on America's first public access UNIX system.
Not currently accepting new accounts."


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Da... am vazut ca de cateva zile nu mai merge... nu ma mai pot loga...

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
suri
Pe lista neagră

Din: vizuina
Inregistrat: acum 18 ani
Postari: 92
Alt shell:

Your request for username: suri on server freebsd has been accepted.
In about 5-10 minutes you can try your new account at freebsd.polarhome.com using POP3 or IMAP protocols.
BUT you can not use your new account with ftp, telnet or ssh because according to shell policy it requires an extra hardcopy registartion.

With this account you got:
- personal homepage
- new e-mail address
- IMAP and POP3 account (even through Web interface)
- free disk space of 50Mb
- irc, ftp etc. access from and to the Internet
- possibility for shell account
- MySQL database account
- use port list as a guide to access polarhome services.

Server hardware description: Intel Pentium 400Mhz, 8G HD, 256M RAM.

Code:

Copyright (c) 1992-2003 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD 5.0-RELEASE #1: Tue Feb  4 01:57:16 CET 2003
    root@ freebsd.polarhome.com:/usr/src/sys/i386/compile/POLARHOME_01
Preloaded elf kernel "/boot/kernel/kernel" at 0xc047c000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc047c0a8.
Timecounter "i8254"  frequency 1193182 Hz
Timecounter "TSC"  frequency 400911043 Hz
CPU: Pentium II/Pentium II Xeon/Celeron (400.91-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x665  Stepping = 5
  Features=0x183f9ff
real memory  = 67108864 (64 MB)
avail memory = 60289024 (57 MB)
Initializing GEOMetry subsystem
Pentium Pro MTRR support enabled
npx0:  on motherboard
npx0: INT 16 interface
Using $PIR table, 6 entries at 0xc00fdd50
pcib0:  at pcibus 0 on motherboard
pci0:  on pcib0
agp0:  mem 0xe0000000-0xe3ffffff at device 0.0 on pci0
pcib1:  at device 1.0 on pci0
pci1:  on pcib1
pci1:  at device 0.0 (no driver attached)
isab0:  at device 7.0 on pci0
isa0:  on isab0
atapci0:  port 0xf000-0xf00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
pci0:  at device 7.2 (no driver attached)
pci0:  at device 7.3 (no driver attached)
vr0:  port 0xe400-0xe47f mem 0xe8000000-0xe800007f irq 12 at device 10.0 on p
ci0
vr0: Ethernet address: 00:50:ba:b2:1b:52
miibus0:  on vr0
amphy0:  on miibus0
amphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
orm0:  at iomem 0xc0000-0xc7fff on isa0
pmtimer0 on isa0
atkbdc0:  at port 0x64,0x60 on isa0
fdc0:  at port 0x3f7,0x3f0-0x3f5 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
ppc0:  at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/16 bytes threshold
lpt0:  on ppbus0
lpt0: Interrupt-driven port
ppi0:  on ppbus0
sc0:  at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
vga0:  at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
Timecounters tick every 10.000 msec
ad0: 8063MB  [16383/16/63] at ata0-master UDMA33
acd0: CDROM  at ata1-slave PIO4
Mounting root from ufs:/dev/ad0s1a
uhci0:  port 0xe000-0xe01f irq 10 at device 7.2 on pci0
usb0:  on uhci0
usb0: USB revision 1.0
uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered

Groaznic !     Eu o sa pun la dispozitie un hard (ceva) mai bun   


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Ai de gand sa faci serverul de "free shell" ?

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
suri
Pe lista neagră

Din: vizuina
Inregistrat: acum 18 ani
Postari: 92
S-ar putea... cum crezi... poate nu chiar pentru toti... doar pt userii "nostri"...

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
N-ar fi o idee rea... dar... iti dai seama ca toti ar vrea root ca sa poata scana... ca doar, asa-s copiii... daca le pui la dispozitie o scula buna, nu se gandesc sa profite intr-un mod pozitiv de ea...

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
suri
Pe lista neagră

Din: vizuina
Inregistrat: acum 18 ani
Postari: 92
Ar vrea ei...
Stai sa vedem ce se poate. N-am chef de conflicte inca din proiect.


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Da... bun punct de vedere...
Ma gandeam si eu la un moment dat sa fac un server pe FreeBSD si sa dau conturi gratis... bineinteles, doar in metropolitan sa nu ma coste traficul... dar am lasat-o balta...
Oricum, ar fi o idee buna un server de genul asta in romania. Cred ca ar fi o premiera


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
andoseg
Newbi

Inregistrat: acum 18 ani
Postari: 32
scuze ca nu am dat nici un semn de viatza de luni incoace insa de lun i incoace tot sterg si dau format si instalez si dezinstalez windows`ul erori si virusi. intr`un final se pare ca m`am reabilitatat again operabilus , frumos tot pana la partea Compilare standard. . deci am facut in liceu C++ , am si acum cartea de C++ din lic, manualul , in care arata datele operatorii si toate cele sa va zic ceva; din liceu nu am intzeles nici pe dracu , e vorba noastra . intrii vaca si iesi bou . plus ca , aveam o profesoara care ne explica cu cartea deschisa , n`auziti cum ne punea pe noi sa facem programele ? cika : deschidetzi cartzile la pagina cutare si scrietzi urmatoarele programe apoi le compilati si ma chematzi sa vad daca merge. ce o fi aia ce o fi aia ne uitam unii la altii , hai ba sa scriem sa ii facem damblaua profei ne era rusine sa intrebam ca se enerva cucoana si radeau altii de noi. de parca ei erau destepti de unde la fel de prosti . in fine cu nimik nu m-am ales bun pacat de lic, ca info-ul mi-a placut dintotdeauna.insa mai putin matematica si stiu ca toti zic ca nu ai cum sa stii info daca nu stii matem, eu tind sa cred ca se poate si asa ceva ,  asta e parerea mea . o sa ziceti ca daca mi-a placut informatica de ce nu m-am apucat sa studiez in ctinuare . din cauza asta : intr-`o seara nu demult , acum vreo 1-2 sapt , de plictiseala , inainte sa`mi pun netu` acasa , ma gandeam : ia ba sa mai deschid si eu manualul ala de C ca tot am vazut pe enet programe compilate in C++ , si poate aco oi avea norocu` sa pricep ce nu am priceput in liceu. poate mi s-o mai fi limpezit si mie mintea. citii o pagina , citii doua , ajunsai la operatorii aritmetici , binari logici. sau ce mai sunt . pai cand incepura si bagara coduri si probleme matematice, auuuuuuuuuuu am si inchis cartea. poate ca asta e problema. eu nu le am cu matem. si revenind la profesoara , dupa ce terminam noi programele , normal din 12 elevi pe grupa , doar 2-3 reuseau sa le COPIEZE nu sa le scrie din cap de la ei , 2-3 sa le copieze fara nici o eroare , la ceilalti , ba o virgula lipsa , ba un punct si vorgula , . si cand ii ziceam : doamna prof, nu`mi merge ! venea se uita in monitor , ea mai proasta ca noi si se ducea la catedra si lua cartea venea cu ea langa cel care nu`i mergea programul si se uita in carte si pe program sa vada ce nu a scris ala corect . ras lumeeeeeee. dar bine ca acum e legea ca profesorii sa dea examene pentru a fi numiti profesori si sa faca cariera . acuma ii testeaza sa vada daca intr`adevara merita sa fie profesori. pacat pt cei de teapa mea, caci e mai greu. in fine . va vine sa credeti ca atunci cand aveam lucrare , ne spunea : va dau lucrare din programele alea 4. va dau din ele 4 va dau 2
cum credeti ca invatam eu ? ati ghicit : le toceam ca pe poezie ! tzineam minte fiecare virgula si punct, asa e , un chin. dar ce sa`i faci.
si cand mi-a dat lucrare
toti
4 , 5
4,
5
cand vine lucrarea mea : 9
facea profesoara , tu de unde ai copiat ? nu stiu cum ai copiat ca am stat numai langa tine. dar in gandul meu rasuflam usurat si numai eu stiam cat imi uscasem gatul sa tocesc programele alea. asa este unii au avut parte de o perioada mai dura. . in fine ceeea ce mai tzin minte la ora actual este ca " cin>> " citeste si "cout>>" scrie ? dar nu stiu unde si cand se pun astea. si acum operabilus , daca am intzeles bine din ce ai spus tu : "int main(){
        return 0;
}

Ce face programul ? Absolut nimic. Si prin nimic inteleg: nu accepta nici un fel de date de intrare si (la prima vedere) nu da nici un fel de date de iesire"


deci "int" este prescurtarea de la integer care desemneaza o vatiabila de intrare ? asa incepe un program , "main" am neclaritatzi ,  return 0 , nu stiu sa explic , eu inteleg cum ca nu ii intoarce nici un rezultat , pentru ca nu este nici o data de intrare ?! .

Nu radetzi mei ca nush


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
operabilus
B.O.F.H.

Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
Salut !
In sfarsit vine careva cu neclaritati.
main() e functia principala in programarea structurata. Adica, programul isi incepe rularea in main() si toate functiile sunt apelate din main(). Ca orice functie trebuie sa returneze o valoare. int din fata lui main() spune ca functia main trebuie sa returneze o valoare de tip int (numar intreg). In windows/dos nu se pune prea mare importanta pe chestia asta dar in UNIX e important. Ca sa-ti dau un exemplu, intra intr-un shell si da-i o comanda (sa zicem ls). Dupa executia comenzii da comanda echo $?. Rezultatul va fi valoarea returnata de ultimul program executat. Daca ai fi rulat un program care sa zicem ca ar da eroare (main ar returna altceva la iesire... 2, 3... orice) rezultatul la echo $? va fi 3 sau ce cod de eroare o fi

Deci... programul care l-am prezentat mai sus nu face nimic... decat sa returneze valoarea 0 la final


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
andoseg
Newbi

Inregistrat: acum 18 ani
Postari: 32
oks asta sa zicem ca am bagat in troak
merci


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
Pagini: 1  

Mergi la