Limbajul de programare D ritchi c. B7. Liste de argumente cu lungime variabilă. B. Kernighan, D. Ritchie

Vă mulțumim că ați descărcat cartea biblioteca electronică gratuită Royallib.ru

Aceeași carte în alte formate

Bucură-te de lectură!

B. Kernighan, D. Ritchie

limbaj de programare C

Ediția a III-a, revizuită

cuvânt înainte

De la publicarea limbajului de programare C în 1978, lumea computerelor a fost revoluționată. Mașinile mari au devenit și mai mari, iar capacitățile computerelor personale sunt acum comparabile cu cele ale mașinilor mari de acum un deceniu. Limbajul C s-a schimbat și el în acest timp, deși nu foarte mult; în ceea ce privește domeniul de aplicare al lui C, acesta a depășit cu mult scopul său inițial ca limbaj de instrumente pentru sistemul de operare UNIX.

Creșterea popularității C, schimbările care s-au acumulat de-a lungul anilor, crearea de compilatoare de către echipele de dezvoltare care nu au fost implicate anterior în proiectarea limbajului - toate acestea au servit ca un stimulent pentru o definire mai precisă și mai oportună a limbajului în comparație. la prima ediție a cărții. În 1983, Institutul Național American de Standarde (ANSI) a înființat un comitet cu scopul de a dezvolta „o definiție clară și independentă de mașină a limbajului C”, păstrându-și în același timp stilul. Rezultatul muncii acestui comitet a fost standardul ANSI C.

Standardul formalizează caracteristici ale limbajului care au fost subliniate doar în prima ediție, dar nu sunt descrise, cum ar fi atribuirea structurilor și enumerațiilor. Introduce un nou tip de declarație de funcție care permite o verificare omniprezentă a coerenței apelurilor de funcție cu definiția lor; specifică o bibliotecă standard cu o gamă largă de I/O, managementul memoriei, manipularea șirurilor de caractere și alte funcții; clarifică semantica care nu era clară în definiția originală și evidențiază în mod explicit ceea ce rămâne dependent de mașină.

A doua ediție a limbajului de programare C introduce versiunea C adoptată ca standard ANSI. Am decis să descriem limba din nou, notând în același timp locurile în care a suferit modificări. În majoritatea paragrafelor, acest lucru nu a adus modificări semnificative, cele mai vizibile diferențe se referă la noua formă de descriere și definire a funcției. Trebuie remarcat faptul că compilatoarele moderne au oferit deja suport pentru o mare parte a standardului.

Am încercat să păstrăm concizia primei ediții. C este un limbaj mic și nu este nevoie de o carte mare pentru a o descrie. Noua ediție îmbunătățește descrierea celor mai importante facilități, cum ar fi pointerii, care sunt esențiale pentru programarea C; exemplele vechi au fost îmbunătățite, iar unele noi au fost adăugate la unele capitole. Așadar, pentru a îmbunătăți interpretarea anunțurilor complexe, sunt incluse ca exemple programe pentru traducerea anunțurilor în descrierile lor verbale și invers. Ca și înainte, toate exemplele au fost testate direct pe texte scrise într-o formă care poate fi citită de mașină.

Anexa A este ghid de referință dar nicidecum un standard. În ea, am încercat să potrivim cele mai esențiale pe un minim de pagini. Prin proiectare, această aplicație ar trebui să fie ușor de citit de către un programator utilizator: pentru dezvoltatorii de compilatoare, standardul în sine ar trebui să servească drept definiție a limbajului. Anexa B enumeră posibilitățile bibliotecă standard. Este, de asemenea, o referință pentru programatorii de aplicații, dar nu pentru dezvoltatorii de compilatoare. Anexa C conține o scurtă listă de diferențe între versiunea prezentată a limbajului C și versiunea sa inițială.

În prefața primei ediții spuneam că „cu cât lucrezi mai mult cu C, cu atât devine mai confortabil”. Această impresie a rămas chiar și după zece ani de lucru cu el. Sperăm că această carte vă va ajuta să învățați C și să-l utilizați cu succes.

Suntem profund datori prietenilor care ne-au ajutat să scoatem a doua ediție a acestei cărți. John Bentley, Doug Gunn, Doug McIlroy, Peter Nelson și Rob Pike au făcut comentarii clare pe aproape fiecare pagină a primei schițe a manuscrisului. Suntem recunoscători lui Al Aho, Dennis Allisson, Joy Campbell, G.R. Emlyn, Karen Fortgang, Allen Golub, Andrew Hume, Dave Kristol, John Linderman, Dave Prosser, Gene Spafford și Chris Van Wyck pentru lectura atentă a cărții. Am primit sfaturi utile de la Bill Cheswick, Mark Kernighan, Andrew Koenig, Robin Lake, Tom London, Jim Reeds, Clovis Tondo și Peter Weinberger. Dave Prosser a răspuns la numeroase întrebări referitoare la detaliile standardului ANSI. Am folosit pe scară largă compilatorul C++ al lui Bjarne Stroustrup pentru verificarea locală a programelor noastre, iar Dave Kristol ne-a oferit un compilator ANSI C pentru verificarea finală. Rich Dreshler a fost de mare ajutor la tastarea cărții. Mulțumim sincer tuturor.

Brian W. Kernighan, Dennis M. Ritchie

Dennis Ritchie este creatorul limbajului de programare C. A dezvoltat C împreună cu Ken Thompson pentru a crea sistemul de operare UNIX. „Newton are o frază despre uriașii care stau pe umeri”, spune Brian Kernighan. — Cu toții stăm pe umerii lui Dennis.

„Practic totul pe web se bazează pe C și UNIX”, a spus legenda de programare Rob Pike pentru Wired. „Browserele sunt scrise în C. Aproape întregul Internet rulează pe nucleul UNIX și este scris și în C. Serverele web sunt scrise în C. Și dacă nu în el, atunci în Java sau C ++. Și aceste limbi sunt derivate din C. Python și Ruby se bazează, de asemenea, pe C. Garantesc pentru faptul că toate echipamentele de rețea rulează pe programe scrise în C. Este foarte greu să supraestimezi ce, cât de mult există în modern economie informaţională bazat pe munca lui Dennis”.

„Nu degeaba Windows a fost scris cândva în C”, adaugă el. Și UNIX este, de asemenea, în centrul desktopului sistem de operare Apple, Mac OS X și IOS. Aceste sisteme sunt instalate pe iPhone și iPad.”

Dezvoltare profesională

Dennis MacAlistair Ritchie s-a născut pe 9 septembrie 1941. Orașul lui natal este Bronxville, New York. Dennis a crescut în New Jersey. A absolvit prestigioasa universitate americană - Harvard. Tânărul inginer a fost deosebit de interesat de sistemul informatic local Univac I. Acolo a primit o diplomă de licență în fizică și matematică aplicată. După absolvire, Ritchie a primit un loc de muncă ca asistent de laborator în laboratorul de informatică Institutul MIT. Acolo s-a angajat în sprijinul flotei de mașini, precum și în dezvoltarea de software.

În această perioadă, a devenit interesat de dezvoltarea sistemelor de operare pentru computere desktop mai mici. (Apoi mașini de calcul„dimensiunea standard” a ocupat camere întregi). MIT și General Electricși-a susținut proiectul. În ciuda lipsei sale de educație în dezvoltarea de software, programarea nu a fost niciodată o problemă pentru Dennis. A scrie programe a fost ca și cum ai rezolva un puzzle pentru el.

În 1967, Ritchie a început să lucreze la Bell Labs, unde s-a format baza pentru toate cele mai faimoase invenții de computere de până acum. Dar la acel moment, Bell Labs era principalul furnizor de telecomunicații din țară.


Laboratoarele Bell

Când a început să lucreze la Bell Labs, Ritchie nu s-a concentrat pe niciun proiect: „Am vrut doar să mă aflu printre oameni cu medii diverse și multe idei. Așa că am început să lucrez la mai multe proiecte deodată pentru a-mi găsi drumul în profesie.”

La companie, Dennis a început să lucreze cu Kenneth Thomson, care se alăturase Bell Labs cu un an mai devreme, în 1966. Ambii și-au dat seama că computerele desktop „miniaturale” vor deveni din ce în ce mai populare încă de la începutul anilor 1970. De asemenea, au decis că astfel de computere au nevoie de un mecanism care să ofere controlul hardware-ului computerului, să organizeze munca cu fișiere și execuția programelor de aplicație, care realizează intrarea și ieșirea datelor.

Așa că dezvoltatorii au venit cu ideea unui sistem de operare. Invenția limbajului C și rolul lui Ritchie în dezvoltarea UNIX, împreună cu Ken Thompson, l-au făcut un pionier al modernului informatică cum se spune pe net.

UNIX și C

Totul a început în 1963, cu mult înainte ca Ritchie să vină la Bell Labs, proiectul Multiple Access Computer, Machine-Aided Cognition, Man and Computer a început ca un proiect pur de cercetare la MIT.

În cadrul proiectului MAC, a fost dezvoltat sistemul de operare CTSS (Compatible Time-Sharing System). În a doua jumătate a anilor '60, au fost create alte câteva sisteme de partajare a timpului, de exemplu, BBN, DTSS, JOSS, SDC și Multiplexed Information and Computing Service (MULTICS), inclusiv.

Multics este o dezvoltare comună între MIT, Bell Telephone Laboratories (BTL) și General Electric (GE) pentru a crea un sistem de operare de partajare a timpului pentru computerul GE-645. Ultimul computer rularea Multics a fost oprită pe 31 octombrie 2000.

Cu toate acestea, BTL s-a îndepărtat de acest proiect încă de la începutul anului 1969.

Ken Thompson și Dennis Ritchie au vrut să continue munca pe cont propriu. Thompson a lucrat la jocul Space Travel pe un GE-635. A fost scris mai întâi pentru Multics și apoi rescris în Fortran sub GECOS pe GE-635. Jocul a simulat corpurile sistemului solar, iar jucătorul a trebuit să aterizeze nava undeva pe o planetă sau satelit.

Nici software-ul, nici hardware-ul acestui computer nu erau potrivite pentru un astfel de joc. Thompson a căutat o alternativă și a rescris jocul pentru un PDP-7 neposedat. Memoria era de 8K cuvinte pe 18 biți și exista și un procesor de afișare vectorială pentru a afișa o grafică frumoasă pentru acea perioadă.

Thompson și Ritchie s-au dezvoltat în întregime în cross-assembler la GE și au portat codul pe benzi perforate. Lui Thompson nu i-a plăcut în mod activ acest lucru și a început să scrie un sistem de operare pentru PDP-7, începând cu sistemul de fișiere. Așa s-a născut UNIX.

Nucleul UNIX a fost scris în limbaj de asamblare, dar în curând Dennis și Ken și-au dat seama că au nevoie de un limbaj „mai mult nivel inalt”, care le-ar oferi mai mult control asupra tuturor datelor. În jurul anului 1970, au încercat să creeze oa doua versiune a kernel-ului Limba Fortran dar rezultatul nu a fost la înălțimea așteptărilor. Apoi a sugerat Ritchie Limba noua; limbaj nou, bazat pe creația lui Thompson, cunoscută sub numele de B(B).

PDP-7 UNIX a dat naștere și limbajului B de nivel înalt, care a fost influențat de limbajul BCPL. Dennis Ritchie a spus că B este C fără tipuri. BCPL încapea în 8 KB de memorie și a fost reproiectat cu atenție de Thompson. A crescut treptat în S.


Imagine din The C Language: M. Waite, S. Prata, D. Martin

B a fost o limbă interpretată, adică sursă parțial convertit în cod mașină în timpul execuției program special. C era un limbaj compilat. A fost tradus în codul mașinii și apoi executat direct pe CPU. Dar în acele zile, C era considerat un limbaj de nivel înalt. Le-a oferit lui Ritchie și Thompson mai multă flexibilitate de care aveau nevoie, fiind și mai rapidi.

Prima versiune a limbajului C nu a diferit foarte mult de versiunea pe care o cunoaștem astăzi. Deși a fost puțin mai ușor. Ea a propus structuri de date și „tipuri” de variabile. Și asta este ceea ce Ritchie și Thompson au folosit pentru a crea noul lor nucleu UNIX. „Au creat C pentru a scrie un program”, spune Pike, care s-a alăturat Bell Labs 10 ani mai târziu. „Și programul pe care au vrut să-l scrie se numea nucleul UNIX”.

„Când scrieți un program mare precum UNIX, trebuie să gestionați interacțiunile dintre cei mai mulți diferite componente: utilizatori, Sistemul de fișiere, discuri, execuția programului și, pentru a gestiona acest lucru eficient, trebuie să înțelegeți bine informațiile cu care lucrați. Le numim structuri de date”, spune Pike.

„Scrierea unui nucleu fără o structură de date, cu aceeași structură și perfecțiune ca nucleul UNIX, ar fi mult mai dificilă. Aveau nevoie de o modalitate de a grupa toate datele și nu a fost posibil să implementeze acest lucru în Fortran.

Pe vremea aceea era mod neobisnuit scrierea unui sistem de operare și asta i-a permis lui Ritchie și Thompson să port sistemul de operare pe alte platforme, ceea ce au făcut la sfârșitul anilor '70. „A deschis porțile pentru ca UNIX să funcționeze pe orice platformă”, spune Pike. „Toate acestea sunt posibile de C.”

„Regele invizibil”

„Dezvoltarea limbajului de programare C a fost un pas uriaș înainte și compromisul potrivit... C a găsit echilibrul potrivit pentru a permite scrierea la nivel înalt, care a devenit mai productivă și momentul potrivit, ai putea controla tot ce s-a întâmplat”, spune Bill Dally, om de știință șef la NVIDIA și Bell profesor de inginerie la Stanford. „[C] a dat tonul programării de câteva decenii”.

După cum a menționat Pike, structurile de date pe care Ritchie le-a construit în C au condus în cele din urmă la paradigma orientată pe obiecte folosită de limbaje moderne, cum ar fi C++ și Java.

Revoluția a început în 1973, când Ritchie și-a publicat lucrarea științifică despre limbaj, iar cinci ani mai târziu, împreună cu colegul său Brian Kernighan, a publicat o carte: The C Programming Language. Kernigan a scris anterior manuale de limbă și, la un moment dat, l-a convins pe Dennis să scrie o carte cu el.

Pike a citit cartea ca student la Universitatea din Toronto. A luat cartea când s-a întors acasă din cauza unei boli. „Acest manual este un exemplu de claritate și claritate a prezentării în comparație cu manualele recente. Este pe bună dreptate un clasic”, spune el. „L-am citit când eram bolnav în pat și m-a făcut să-mi uit de boală”.

La fel ca mulți studenți, Pike programa deja în limbaj. C s-a răspândit în toate campusurile universitare, deoarece Bell Labs a început să ofere cod sursă UNIX. Mai presus de toate, sistemul de operare a dat impuls dezvoltării mișcării moderne de software liber. Pike nu exagerează când spune că contribuția lui Ritchie nu poate fi supraestimată. Și deși Ritchie a câștigat Premiul Turing în 1983 și Medalia Națională a Tehnologiei în 1998, încă nu i s-a acordat creditul pe care îl merită.

Kernighan și Pike îl descriu pe Ritchie ca pe o persoană neobișnuit de privată. „Timp de peste 20 de ani am lucrat în cealaltă parte a camerei și totuși nu simt că l-am cunoscut bine”, spune Pike.

Steve Jobs era, de asemenea, o persoană secretă, iar poziționarea sa pe furiș nu făcea decât să întărească cultul personalității care îl înconjura. Ritchie a trăit într-o perioadă complet diferită și a lucrat în condiții complet diferite, spre deosebire de Jobs. Poate de aceea Ritchie nu era atât de popular.

„Jobs era regele vizibil, iar Ritchie, în mare parte, regele invizibil”, a spus Martin Rinard, profesor de electricitate și informatică la Institutul de Tehnologie din Massachusetts și membru al Laboratorului de Informatică și Inteligență Artificială.

„Geniul lui Jobs este că a avut gust și a creat produse pe care oamenii doreau să le folosească. Și putea crea lucruri pe care oamenilor le plăceau foarte mult. Ritchie a creat ceva pe care tehnicienii l-ar putea folosi pentru a construi infrastructura de bază. Oamenii nu trebuie să-l vadă, deși îl folosesc în fiecare zi”.

După UNIX

Principala problemă a UNIX, din punctul de vedere al autorilor săi, a fost că, datorită arhitecturii sale, sistemul de operare nu s-a putut adapta în mod transparent la lumea IT care se schimbase semnificativ de la dezvoltarea sa. Mai simplu spus, UNIX muri din cauza propriilor probleme și toate încercările de a-l adapta la condițiile moderne au dus la complicarea sistemului de operare, la introducerea multor API-uri complexe și disparate, la noi straturi, protocoale de rețea, formate de date, care au făcut ceea ce a fost cândva un sistem de operare simplu, bine gândit, elegant, greu, stângaci și dificil de întreținut într-un pachet de cod.

Amintindu-și succesele UNIX, Ritchie a continuat cercetările în sistemele de operare și limbaje de programare până la moartea sa. El a adus contribuții semnificative la dezvoltarea sistemelor de operare Plan 9 și Inferno, precum și a limbajului de programare Limbo.

Când cercetătorii de la Bell Labs și-au dat seama că UNIX nu mai poate fi reparat, au decis să înceapă de la zero și au dezvoltat un nou sistem de operare, fără legătură și incompatibil cu UNIX, cu numele excentric Plan 9.


Ideea principală a Planului 9 a fost de a aduce conceptul de „totul este un fișier” la un triumf logic și de a construi întregul sistem de operare din fișiere sintetice (mai precis, să reprezinte toate resursele sistemului de operare sub formă de fișiere). Mai mult, să o facă în așa fel încât nu numai aplicații localeși utilizatori, dar și orice client la distanță. Rezultatul a fost protocolul de fișier 9P.
În 1995, Lucent Technologies, noul proprietar al Bell Labs, a transferat mulți dintre dezvoltatorii Planului 9 unei alte echipe pentru a crea sistemul de operare Inferno bazat pe Planul 9.

Conducerea companiei, nu fără motiv, a considerat că Plan 9, capabil să ruleze transparent și ușor pe computere organizate într-un rețea de calculatoare, se va arăta perfect la putere redusă dispozitive mobileși terminale, care la acea vreme trebuiau pur și simplu să descarce partea leului din funcțiile lor către alte mașini pentru a asigura performanță și utilizare optimă.

Pe lângă portabilitate și performanță, Inferno are o altă caracteristică foarte importantă: prezența limbajului de programare a aplicației Limbo, care a fost dezvoltat de la zero special pentru Inferno și există doar în cadrul acestui OS. Sintaxa sa este foarte asemănătoare cu cea a lui C, dar are incluziuni din multe alte limbi.

Sfârșitul legendei

Pe 12 octombrie 2011, Ritchie a fost găsit mort la casa lui din New Jersey, unde locuia singur. Prima veste a morții a fost raportată de fostul său coleg Rob Pike: „Dennis Ritchie a murit în acest weekend la el acasă”. Cauza și ora exactă a morții au rămas necunoscute. Cu puțin timp înainte, a fost tratat pentru cancer de prostată, avea și o afecțiune cardiacă. Ritchie a murit la o săptămână după moartea lui Steve Jobs, dar spre deosebire de Jobs, moartea lui Ritchie a primit puțină acoperire mediatică.

Dennis Ritchie este omul care a creat limbajul de programare foarte popular - "C", sau cum se mai spune - "Parintele limbajului de programare C". Dennis s-a născut pe 9 septembrie 1941 în Bronxville, New York. Tatăl său, Alistair Ritchie, a lucrat ca inginer de sisteme la Bell Laboratories.

Puțin mai târziu, Ritchie și familia sa s-au mutat în New Jersey, au absolvit Summit High School, apoi au primit o diplomă de licență de la Universitatea Harvard în fizică și matematică în 1963, iar apoi un doctorat în matematică în 1968.

Dennis este unul dintre dezvoltatorii cheie ai nucleului Unix și co-autor al cărții Denis Ritchie The C Programming Language. A lucrat cu Ken Thomson, omul care a scris originalul Unix. Mai târziu a lucrat la limbajul C cu Brian Kernighan, colectiv numiți și K & R - Kernighan și Ritchie. Denis a adus o contribuție foarte mare la Unix. Mai ales că Unix a fost portat pe diverse platforme. Ideile sale încă trăiesc în centrul proiectării sistemului de operare în aproape toate limbajele de programare noi și în fiecare informație.

Cariera lui Ritchie

Dennis Ritchie și-a început cariera în 1967 la Bell Laboratories, un centru de cercetare computațională. Acesta este unul dintre cele mai cunoscute centre inovație digitalăîn lume, precum și locul în care s-a născut tranzistorul.

John Kim, președintele Alcatel-Lucent Bell Labs, a declarat:

Dennis și-a tratat bine colegii de la Bell Labs și ne va fi foarte dor de el. El ne-a inspirat cu adevărat pe toți. Nu numai pentru multele sale realizări, ci și pentru că a fost un prieten, un inventator, o persoană modestă și dulce. Dorim să exprimăm cele mai profunde condoleanțe familiei lui Ritchie și tuturor celor care au fost asociați cu el în orice fel.

Unix

La Bell Labs, Ritchie a lucrat la proiectul Multics. Acesta era sistemul de operare care trebuia să combine ideea procesare în lotși interactivitate. Programul a fost lansat dintr-o stivă de cărți, iar programatorul, operatorul sau utilizatorul însuși avea control total peste executarea programului. Apoi, Denis l-a cunoscut pe Ken Thomson, care mai târziu avea să devină unul dintre principalii angajați ai lui Ritchie:

Unul dintre lucrurile evidente pentru care Multics nu a avut succes comercial a fost faptul că este foarte complex. She Had Too Much - Dennis Ritchie

Curând, Bell Labs a încetat să lucreze la Multics, dar Ritchie și Ken au decis să nu abandoneze ideea de interacțiune cu utilizatorul și au început să lucreze la succesorul său - Unix. Acum este un sistem de operare modern, distribuția sa a început în 1973.

limbaj de programare C

Varietatea platformelor informatice din anii 1970 a avut un efect negativ asupra vieții creatorilor de software. Au trebuit fie să-și petreacă timp și energie construindu-și software-ul pentru diverse platforme noi, fie să-și limiteze programele să ruleze doar pe o singură platformă.

Nucleul original Unix a fost scris în limbaj de asamblare, dar Ritchie și Ken au decis că au nevoie de un limbaj de nivel înalt pentru a le oferi mai mult control asupra tuturor datelor și asupra sistemului de operare.

Ei au folosit BCPL (Limbajul de programare combinat de bază) pentru a scrie UNIX, l-au comprimat la opt kiloocteți și l-au redenumit B.

Apoi Ritchie a mers și mai departe și a dezvoltat un nou limbaj de programare numit C. A fost o actualizare la limbajul B care a adăugat tipuri de date și o nouă sintaxă. B era un limbaj interpretat, pentru executarea lui era nevoie de un strat între procesor și comenzile limbajului, în timp ce C era compilat. Este mai întâi tradus în codul mașinii și apoi executat direct de procesor.

UNIX este un sistem de operare simplu, dar trebuie să fii un geniu pentru a-i înțelege simplitatea. — Dennis Ritchie

Programele scrise în C ar putea fi portate ușor și rapid pe alte platforme pe care ar putea rula C. C avea o sintaxă foarte simplă și o cantitate mică de instrucțiuni, precum și o structură modulară. Din acest motiv, a fost ușor de utilizat pe diferite computere. Existau blocuri uriașe de cod C pe care fiecare dezvoltator le putea copia și lipi în programul lor fără a fi nevoie să scrie totul de la zero. Astfel de blocuri de cod erau ușor disponibile prin biblioteci, astfel încât programatorii le puteau accesa foarte repede.

Ritchie și Ken au rescris UNIX în C, ceea ce i-a oferit portabilitate și, de asemenea, le-a oferit programatorilor posibilitatea de a folosi un sistem de operare, un limbaj de programare și un set mic de instrumente. Prin urmare, Unix și-a luat mai târziu locul ca sistem de operare pentru experimentare și rețea între computere.

„Evident că persoana care a avut cea mai mare influență asupra carierei mele este Ken Thompson”. — Dennis Ritchie

În 1978, a fost publicată cartea lui Dennis Ritchie și Brian Kenigan, Limbajul de programare C. Cartea acoperă o scurtă introducere în limbajul C, precum și diverse tehniciși stiluri de programare. Aceasta carte ramane ghid practic pentru mulți programatori încă.

La mijlocul anilor 1980, limbajul C a devenit unul dintre cele mai populare limbaje de programare din lume. Datorită funcționalității și vitezei cu care C poate fi utilizat cu ușurință pentru a crea software și a-l rula pe diverse platforme, multe companii au început să folosească C pentru a-și dezvolta produsele.

Limbajul de programare C este încă folosit astăzi ca al doilea cel mai popular limbaj de programare din lume pentru sisteme de aplicații, sisteme de operare și dezvoltarea sistemelor încorporate. Influența lui este încă vizibilă în mulți limbile moderne. La fel cum conceptele UNIX sunt acum considerate precepte de calcul.

„C fusese deja implementat pentru mai multe mașini și sisteme de operare foarte diferite, UNIX era deja extins la PDP-11, dar portabilitatea întregului sistem era complet nouă”. - Denis Ritchie

Ultima contribuție majoră pe care Dennis Ritchie a adus-o la Unix este mecanismul de threading, care este folosit pentru a conecta dispozitive, aplicații și protocoale.

Windows, Mac, Linux și...

Numeroase aplicații sunt scrise în C sau descendentul său obiectiv, C++. C a fost standardizat de ANSI și ISO, deoarece aproape fiecare aspect al industriei informațiilor este construit pe deasupra lui astăzi.

C++ sau JavaScript sunt exemple de limbaje care au fost create ulterior pe baza C, iar browserele sunt, de asemenea, scrise în C. Microsoft Windows a fost scris inițial în C și chiar și ambele sisteme de operare ale Apple sunt bazate pe Unix.

Nu există nicio îndoială că contribuția lui Dennis Ritchie a schimbat semnificativ nucleul industriei computerelor.

Stilul de programare care este oferit în C este probabil să fie folosit din ce în ce mai puțin. Dar JavaScript și XML vor continua să devină din ce în ce mai importante. — Dennis Ritchie

Ulterior, Richty a devenit șef al departamentului de cercetare a sistemelor informatice la Lucent Technologies și s-a străduit să facă computerele mai simple și mai bune pentru utilizatori până la pensionare în 2007.

Premii

  • Premiul ACM pentru excelență în sisteme și limbi în 1974.
  • Premiul IEEE Emmanuel Piore în 1982
  • Premiul angajaților Bell Labs în 1984
  • Premiul Turing în 1983
  • Premiul ACM Software Systems în 1983
  • A fost nominalizat de Academia Națională de Inginerie din Statele Unite ale Americii în 1963
  • Medalia IEEE Hamming în 1990.
  • Membru al muzeului istoricul computeruluiîn 1997.
  • Medalia națională a Statelor Unite ale Președintelui Bill Clinton pentru munca sa asupra sistemului de operare UNIX și limbajului de programare C în aprilie 1999.
  • Premiu de la Institutul de Cercetare Industrială pentru contribuțiile sale valoroase la știință și tehnologie în 2005.
  • Premiul Japoniei pentru Informatizare și Dezvoltare UNIX în 2011.

Toate premiile pe care le-a primit Dennis Ritchie au fost primite și de Ken Thomson.

Moartea lui Ritchie

Dennis locuia singur în casa lui din Berkeley Heights, New Jersey. A fost găsit mort pe 12 octombrie 2011. Nu se cunosc cauzele și ora exactă a morții. El are o sănătate precară în ultimii ani după ce a fost supus unui tratament pentru cancer de prostată și boli cardiovasculare.

A murit la o săptămână după moartea lui Steve Jobs, dar nu a fost atât de bine acoperit de presă. Eliberare Fedora Linux 16 din 2012 a fost dedicat memoriei lui Dennis Ritchie.

Paul Krezi, istoricul computerelor, a declarat după moartea lui Ritchie.

transcriere

1 B.V. Kernighan, D.M. Richie. LIMBA C

2 Rezumat Limbajul „C” (pronunțat „si”) este un limbaj de programare de uz general caracterizat prin parcimonie de expresie, flux de control modern și structuri de date și un set bogat de operatori. Limbajul „C” nu este nici un limbaj de „nivel foarte înalt”, nici un limbaj „mare” și nu este destinat unei aplicații speciale. dar lipsa restricțiilor și generalitatea limbajului îl fac mai convenabil și mai eficient pentru multe sarcini decât limbile presupus mai puternice. Limbajul „C”, destinat inițial pentru scrierea sistemului de operare „UNIX” pe computerul DEC PDP-11, a fost dezvoltat și implementat pe acest sistem de către Dennis Ritchie. Sistemul de operare, compilatorul „C” și, în esență, toate aplicațiile din sistemul „UNIX” (inclusiv toate software folosite la pregătirea acestei cărţi) sunt scrise cu „C”. Compilatoarele comerciale „C” există, de asemenea, pe mai multe alte computere, inclusiv IBM SYSTEM/370, HONEYWELL 6000, INTERDATA 8/32. Cu toate acestea, limbajul „C” nu este legat de niciun hardware sau sistem anume și nu este ușor să scrieți programe care pot fi trecute nemodificate pe orice computer care are un compilator „C”. Această carte este menită să ajute cititorul să învețe cum să programeze în limbajul „C”. Conține o introducere tutorial pentru a pune în funcțiune noii utilizatori cât mai repede posibil, capitole separate despre toate caracteristicile majore ale limbii și un ghid de referință. Formarea se construiește în principal pe citirea, scrierea și analizarea exemplelor, și nu pe formularea simplă a regulilor. Exemplele din această carte sunt în cea mai mare parte programe reale complete, nu piese individuale. Toate exemplele au fost verificate direct din textul cărții, unde sunt tipărite într-o formă adecvată pentru introducerea mașinii. Pe lângă faptul că arătăm cum să eficientizăm utilizarea limbajului, am încercat, acolo unde este posibil, să ilustrăm algoritmi utili si principii stil bunși design inteligent. Această carte nu este o introducere în programare; presupune o anumită familiaritate cu conceptele de programare de bază, cum ar fi variabile, instrucțiuni de atribuire, bucle și funcții. Cu toate acestea, un novice în programare ar trebui să poată citi la rând și să se simtă confortabil cu limbajul, deși ajutorul unui coleg mai experimentat ar fi util. Din experiența noastră, „C” s-a dovedit a fi un limbaj plăcut, expresiv și versatil pe o mare varietate de diverse programe. Este ușor de învățat și nu își pierde calitatea odată cu creșterea experienței programatorului. Sperăm că această carte vă va ajuta să o folosiți bine. Criticile și sugestiile amănunțite din partea multor prieteni și colegi au adăugat mult atât cărții în sine, cât și plăcerii noastre de a o scrie. În special, Mike Biapsey, Jim Blue, Stu Feldman, Doug McIlroy, Bill Room, Bob Rosin și Larry Rosler au citit cu atenție multe opțiuni. De asemenea, îi datorăm lui El Aho, Steve Born, Dev Dvorak, Chuck Haley, Debbie Haley, Marion Harris, Rick Holt, Steve Johnson, John Masha, Bob Mitz, Ralph Mew, Peter Nelson, Elliot Pinson, Bill Plager, Jerry Spivak, Ken Thompson și lui Peter Weinberger pentru comentarii utile în diferite etape și lui Mike Losk și Joe Osanna pentru ajutorul lor neprețuit la tipărirea cărții. Brian W. Kernighan Dennis M. Ritchie


3 Conținut Introducere 9 1. Educațional Introducere în variabile și operator aritmetic FOR FOR Constante simbolice Set de programe utile Introducerea și ieșirea simbolurilor Copierea simbolurilor calculul liniilor calculul cuvintelor matrice de funcție Apelați argumente în funcție de tabloul de simboluri: extern tipuri de variabile, operații și nume de expresii Tipuri de variabile și dimensiuni ale constantei Constanta Constanta Expresie curea a constantei minuscule descriere operații aritmetice Operații Relații și operații logice Transformarea tipurilor de operații Operații Operații logice crescătoare și reduse Operații și exprimare Condiționare Expresii și Operatori de procedură de calcul și Blocuri IF ELSE ELSE IF comutator Cicluri Comutator WHILE AND FOR OPERATOR BREAK 67


4 3.8. Continuare operator GOTO Operator GOTO OBLOCURI și Structura programului Informații de bază Funcții care returnează valori non-sărutate despre argumentele funcțiilor reguli variabile externe care determină câmpul de acțiune Registrul variabilelor statice Structuri bloc variabile inițializarea recuretorului limbajului „C” Macro Executing 93 5. Dipers și indicatori și indicatori și indicatori ARRAYS POINTERS ȘI ADRESE POINTERS ȘI FUNCȚII ARGUMENTE POINTERS ȘI MATRII ADRESĂ POINTERS ARITMETIC CARACTERE ȘI FUNCȚII POINTERS NON-INTEGER MULTIDIMENSIONAL ARRAYS POINTERS MATRICE; Indicatori de inițializare a matricelor indicatorilor de indicatori și matrice multidimensionale linia de comandă a argumentelor argumentelor privind funcția structurii structurii structurii și funcțiile matricei de structuri de structuri pe structurile structurii care se referă la căutarea în tabelul câmpului de combinație Determinarea tipului de intrare și concluzie la biblioteca standard intrarea standard și retragerea funcției GETCHAR ȘI PUTCHAR 150


5 7.3. Funcție de ieșire formală Funcție de intrare format de imprimare Conversie format scanf acces acces la fișiere STDERR eroare și ieșire Introducerea și ieșirea liniilor mai multe funcții diverse de verificare a tipului de simboluri și funcție de transformare UNGETC Acoperirea sistemului de control al memoriei UNIX UNIX DIFTERS OPERAȚII DE DIED/DOSTICTION INDADERS REDADER Și Scrieți deschiderea, crearea, închiderea și accesul arbitrar remarcabil (deconectare) Căutați și căutați exemplu de implementare a funcțiilor Fopen și GETC Exemplu de manuale de tipărire Exemplu de manuale distribuite în memorie Anexa A: Ghid de referință pentru limbajul „C” Comentarii Identificatori de comentarii (nume) Cuvinte cheie INTEGER Konstanta CONSTANTE EXPLICITE CONSTANTE LUNGI CARACTER CONSTANTE FLOTĂTOR CONSTANTE ȘIRURI CARACTERISTICI HARDWARE SINTAXĂ NOTAȚIE CE ESTE ÎN NUMELE TĂU MY? OBIECTE ȘI VALORI L 187


4 Operațiunea include „sau” operațiunea logică „și” operațiunea logică „sau” operațiunea condiționată Operațiunea Operațiunea Operațiunea Operațiunea Operațiunea Operațiunea Descrierea CPEC Specificatorii specificatorilor clasei de memorie SPECILIVERS TRANDERS OF DETTERS și ANOTIȚII DE TYPEDEF Operator Operator Operator Operator (sau bloc) Operatori condiționali Operator WHILE STATEMENT DO STATEMENT PENTRU STATEMENT SWITCH STATEMENT BREAK STATEMENT CONTINUE STATEMENT RETURN STATEMENT GOTO STATEMENT 211


7 Operatorul marcat al unui operator gol Definiții externe ale funcției Definiții externe ale Regulilor de date care determină sfera de acțiune a zonei lexicale Zona de acțiune a identificatorilor externi ai liniei de control a compilatorului de compilatoarele lexemos includerea de fișiere Descrieri convenționale din nou despre tipurile de structură și combinarea funcției de matrice, pointeri și indexare Explicit POINTOR EXPRIMI CONSTANTE PORTABILITATE CONSIDERAȚII ANACRONISME REZUMAT REGULI DE SINTAXĂ DESCRIERE EXPRESII ATRIBUIRE STRUCTURĂ 227


8 28. TIP DE Enumerare TABEL IMAGINI AL CARACTERELOR NETIPRIARE ALE LIMBAJULUI „C”. 229

9 B.V. Kernighan, D.M. Richie. Limbajul C 9 Introducere Limbajul „C” este un limbaj de programare universal. Este strâns legat de sistemul de operare „UNIX”, deoarece a fost dezvoltat pe acel sistem și întrucât „UNIX” și software-ul său sunt scrise în „C”. Limbajul în sine, totuși, nu este asociat cu niciun sistem de operare sau mașină; şi deşi se numeşte limba programarea sistemului, deoarece este convenabil pentru scrierea sistemelor de operare, a fost folosit cu egal succes la scrierea de programe de calcul mari, programe de procesare de text și baze de date. Limba „C” este o relativă „ nivel scăzut". Nu este nimic ofensator la o astfel de caracterizare; înseamnă pur și simplu că "C" se ocupă cu obiecte de același fel ca majoritatea computerelor, și anume, cu simboluri, numere și adrese. Ele pot fi combinate și transferate prin aritmetică obișnuită și operatii logice realizate de computere reale. Nu există operații în limbajul „C” care să se ocupe direct de obiecte compuse, cum ar fi șiruri de caractere, seturi, liste sau matrice tratate ca un întreg. Aici, de exemplu, nu există un analog cu operațiunile PL/1 care operează pe matrice și șiruri întregi. Limba nu oferă alte opțiuni de alocare a memoriei în afară de definiție statică iar mecanismul de stivuire asigurat de local funcții variabile; nu există „heap” sau „garbage collection” așa cum este prevăzut în ALGOL-68. În cele din urmă, „C” în sine nu oferă nicio capacitate I/O: nu există instrucțiuni READ sau WRITE și nici acces la fișiere cu metode încorporate. Toate aceste mecanisme de nivel înalt trebuie să fie furnizate de funcții numite în mod explicit. În mod similar, limbajul „C” oferă doar construcții simple, secvențiale ale fluxului de control: verificări, bucle, grupări și subrutine, dar nu multiprogramare, operații paralele, sincronizare sau corutine. Deși absența unora dintre aceste facilități poate părea o inferioritate deprimantă („deci trebuie să apelez la o funcție pentru a compara două șiruri de caractere?!”), dar păstrarea limbajului modest ca dimensiune dă beneficii reale. Deoarece „C” este relativ mic, nu ocupă mult spațiu pentru a-l descrie și poate fi învățat rapid. Un compilator cu „C” poate fi simplu și compact. În plus, compilatoarele sunt ușor de scris; folosind tehnologie moderna vă puteți aștepta să scrieți un compilator pentru un computer nou în câteva luni și, în același timp, se va dovedi că 80% din programul noului compilator va fi comun cu programul pentru compilatoarele deja existente. Aceasta oferă un grad înalt mobilitate lingvistică. Deoarece tipurile de date și structurile de control găsite în „C” sunt suportate direct de majoritatea computerelor existente, biblioteca necesară pentru a rula programe izolate este foarte mică. Pe PDP-11, de exemplu, conține doar programe pentru multiplicarea și împărțirea pe 32 de biți și pentru executarea programelor de intrare și ieșire a secvenței. Desigur, fiecare implementare furnizează o bibliotecă cuprinzătoare, interoperabilă de funcții pentru efectuarea I/O, procesarea șirurilor și alocarea memoriei, dar, deoarece sunt doar referite explicit, pot fi evitate dacă este necesar; aceste funcții pot fi scrise compact în „C” însuși. Din nou, datorită faptului că limbajul „C” reflectă posibilitățile calculatoare moderne, programele „C” se dovedesc a fi suficient de eficiente încât nu


10 B.V. Kernighan, D.M. Richie. Limbajul C.10 este solicitat să scrie programe în limbaj de asamblare. Cel mai exemplu convingător Acesta este sistemul de operare „UNIX” în sine, care este scris aproape în întregime în „C”. Dintre liniile de program ale sistemului, doar aproximativ 800 dintre liniile de cel mai jos nivel sunt scrise în asamblator. De asemenea, în esență toate aplicațiile software de pe un sistem „UNIX” sunt scrise în „C”; marea majoritate a utilizatorilor „UNIX” (inclusiv unul dintre autorii acestei cărți) nici măcar nu cunosc limbajul de asamblare PDP-11. Deși „C” corespunde capabilităților multor computere, nu depinde de nicio arhitectură anume a mașinii și, prin urmare, face posibilă scrierea de programe „portabile” fără prea mult efort, de exemplu. programe care pot fi sărite fără modificări pe hardware diferit. A devenit deja o tradiție în cercurile noastre de a transfera software-ul dezvoltat pe sistemul UNIX către sisteme informatice: HONEYWELL, IBM și INTERDATA. De fapt, compilatoarele și software-ul „C” par să fie mult mai compatibile atunci când rulează programe pe aceste patru sisteme decât versiunile standard ale Institutului Național American de Standarde (ANSI) Fortran. Sistemul de operare „UNIX” în sine rulează acum atât pe PDP-11, cât și pe INTERDATA 8/32. Cu excepția programelor care inevitabil se dovedesc a fi oarecum dependente de mașină, cum ar fi compilatorul, asamblatorul și depanatorul. Software-ul scris în limbajul „C” este identic pe ambele mașini. În cadrul sistemului de operare în sine, cele 7.000 de linii de cod, excluzând limbajul de asamblare al computerului și software-ul de control I/O, sunt identice în proporție de 95%. Programatorii familiarizați cu alte limbi poate considera util să menționeze câteva aspecte istorice, tehnice și filosofice ale lui „C” pentru comparație și contrast. Multe dintre cele mai multe idei importante„C” provine din limbajul BCPL mult mai vechi, dar încă destul de vital, dezvoltat de Martin Richards. Indirect, BCPL a influențat „C” prin limbajul „B” scris de Ken Thompson în 1970 pentru primul sistem de operare „UNIX” de pe computerul PDP-7. Deși „C” împărtășește mai multe caracteristici cu BCPL, nu este în niciun caz un dialect al acestuia din urmă. Atât BCPL cât și „B” sunt limbi „fără tip”; singurul tip de date pentru ei este un cuvânt de mașină, iar accesul la alte obiecte este implementat operatori speciali sau apeluri de funcții. În limbajul „C”, obiectele de tip de date de bază sunt caractere, numere întregi de mai multe dimensiuni și numere în virgulă mobilă. În plus, există o ierarhie de tipuri de date derivate create de pointeri, matrice, structuri, uniuni și funcții. Limbajul „C” include constructele de bază ale fluxului de control necesare pentru programele bine structurate: gruparea instrucțiunilor, luarea deciziilor (IF), bucle cu o verificare a terminației la început (WHILE, FOR) sau la sfârșit (DO) și alegerea una dintre multele Opțiuni(INTRERUPATOR). (Toate aceste caracteristici au fost furnizate și în BCPL, deși cu o sintaxă ușor diferită; acest limbaj a anticipat moda pentru programare structurată). Limbajul „C” are pointeri și posibilitatea de aritmetică a adreselor. Argumentele sunt transmise funcțiilor prin copierea valorii argumentului, iar funcția apelată nu poate schimba argumentul real în program de apelare. Dacă doriți să obțineți „apel prin referință”, puteți trece implicit un pointer, iar funcția poate schimba obiectul către care indică pointerul. Numele de matrice sunt transmise prin specificarea începutului matricelor, astfel încât argumentele tipului de matrice sunt apelate efectiv prin referință.

11 B.V. Kernighan, D.M. Richie. Limbajul C.11 Orice funcție poate fi apelată recursiv, iar variabilele sale locale sunt de obicei „automate”, adică. Creat din nou la fiecare apel. Declarația unei funcții nu poate fi conținută în alta, dar variabilele pot fi declarate în conformitate cu structura obișnuită a blocurilor. Funcțiile dintr-un program „C” pot fi difuzate separat. variabilele în raport cu o funcție pot fi interne, externe, dar cunoscute numai în cadrul uneia fișier sursă, sau complet global. Variabilele interne pot fi automate sau statice. Variabilele automate pot fi plasate în registre pentru o mai mare eficiență, dar declarația de registru este doar un indiciu pentru compilator și nu are nimic de-a face cu registrele mașinii specifice. Limbajul „C” nu este un limbaj puternic tipizat în sensul Pascal sau Algol 68. Este relativ îngăduitor la conversia datelor, deși nu va converti automat tipurile de date cu ușurința sălbatică a PL/1. Compilatoarele existente nu prevăd nicio verificare în timp de rulare a indicilor de matrice, a tipurilor de argumente și așa mai departe. În situațiile în care se dorește verificarea puternică a tipului, utilizați versiune speciala compilator. Acest program se numește LINT, aparent pentru că selectează bucăți de puf din programul tău. Programul LINT nu generează cod de mașină, dar face o verificare foarte strictă asupra tuturor acelor aspecte ale programului care pot fi controlate la compilare și încărcare. Identifică nepotrivirile de tip, incompatibilitățile argumentelor, variabilele neutilizate sau evident neinițializate, potențialele probleme de portabilitate și așa mai departe. Pentru programele care trec cu succes prin LINT, absența erorilor de tip este garantată cu aproximativ aceeași completitate ca și pentru programele scrise, de exemplu, în ALGOL-68. Alte caracteristici ale programului LINT vor fi observate atunci când se va prezenta oportunitatea. În cele din urmă, limbajul „C”, ca orice altă limbă, are dezavantajele sale. Unele operațiuni au o prioritate nefericită; unele secțiuni ale sintaxei ar putea fi mai bune; Există mai multe versiuni ale limbii care diferă în mici detalii. Cu toate acestea, „C” sa dovedit a fi un limbaj excepțional de eficient și expresiv pentru o mare varietate de aplicații de programare. Conținutul cărții este organizat după cum urmează. Capitolul 1 este o introducere tutorială în partea centrală a limbajului „C”. Scopul este de a lăsa cititorul să înceapă cât mai repede posibil, deoarece credem cu tărie că singura modalitate de a învăța o nouă limbă este să scrieți programe în ea. Totuși, aceasta presupune cunoștințe de lucru ale elementelor de bază ale programării; nu explică ce este un computer sau un compilator și nici nu explică sensul unor expresii precum N=N+1. Deși am încercat, acolo unde a fost posibil, să demonstrăm tehnici de programare utile. Această carte nu este destinată a fi un ghid de referință pentru structurile de date și algoritmi; acolo unde am fost forțați să facem o alegere, ne-am concentrat pe limbă. Capitolele 2 până la 6 acoperă diferitele aspecte ale „C” mai detaliat și ceva mai formal decât în ​​Capitolul 1, deși accentul este încă pus pe analizarea exemplelor de programe complete și utile, mai degrabă decât a fragmentelor individuale. Capitolul 2 discută tipurile de date de bază, operatori și expresii. Capitolul 3 tratează instrucțiunile de control: IF-ELSE, WHILE, FOR și așa mai departe. Capitolul 4 acoperă funcțiile și structura programului, variabile externe, reguli


12 B.V. Kernighan, D.M. Richie. Limba C. 12 domenii specifice de descriere etc. Capitolul 5 discută indicatorii și aritmetica adreselor. Capitolul 6 conține o descriere detaliată a structurilor și uniunilor. Capitolul 7 descrie biblioteca standard C I/O, care oferă o interfață standard pentru sistemul de operare. Această bibliotecă I/O este acceptată pe toate mașinile care implementează „C”, deci programele care îl folosesc pentru intrare, ieșire și alte funcțiile sistemului, poate fi transferat de la un sistem la altul practic neschimbat. Capitolul 8 descrie interfața dintre programele „C” și sistemul de operare „UNIX”. Accentul este pus pe I/O, sistemul de fișiere și portabilitate. Deși unele părți ale acestui capitol sunt specifice sistemului de operare „UNIX”, programatorii non-UNIX ar trebui să găsească totuși material util, inclusiv câteva informații despre modul în care este implementată o versiune a bibliotecii standard și sugestii pentru realizarea portabilității programului. Anexa A conține un manual de referință pentru limba „C”. Este declarația „oficială” a sintaxei și semanticii lui „C” și (cu excepția compilatorului propriu) arbitrul final pentru toate ambiguitățile și omisiunile din capitolele precedente. Deoarece „C” este un limbaj în evoluție implementat pe multe sisteme, este posibil ca unele dintre materialele din această carte să nu corespundă starea curenta dezvoltare pe un anumit sistem. Am încercat să evităm astfel de probleme și să avertizăm posibile dificultăți. În cazuri îndoielnice, însă, am preferat în general să descriem situația pentru sistemul „UNIX” PDP-11, deoarece acesta este mediul pentru majoritatea programatorilor „C”. Anexă și, de asemenea, descrie discrepanțe în implementările limbajului „C” pe sistemele majore. 1. Introducere tutorial Să începem cu o introducere rapidă în limbajul „C”. Scopul nostru este să demonstrăm elementele esențiale ale limbajului în programe reale, fără a ne bloca în detalii, reguli formale și excepții. În acest capitol, nu încercăm să enunțăm limba complet sau chiar strict (desigur, exemplele date vor fi corecte). Vrem să te ducem la nivelul în care poți scrie cât mai curând posibil. programe utile, iar pentru a realiza acest lucru, ne concentrăm pe elementele de bază: variabile și constante, aritmetică, instrucțiuni de transfer de control, funcții și informații de bază despre intrare și ieșire. Lăsăm în mod deliberat din acest capitol multe elemente ale limbajului „C” care sunt de o importanță capitală atunci când scriem programe mari, inclusiv indicatori, structuri, majoritatea setului bogat de instrucțiuni „C”, câteva instrucțiuni de transfer de control și o multitudine de detalii. Această abordare are, desigur, dezavantajele ei. Cel mai important, o descriere completă a oricărui element specific al limbii nu este prezentată într-un singur loc, iar explicațiile, din cauza conciziei, pot duce la interpretare greșită. În plus, din cauza imposibilității de a folosi întreaga putere a limbajului, exemplele nu sunt atât de concise și elegante pe cât ar putea fi. Deși am încercat să minimizăm aceste neajunsuri, ține cont de ele. Un alt dezavantaj este că capitolele următoare vor repeta în mod inevitabil părți ale acestui capitol. Sperăm că o astfel de repetiție va fi mai utilă decât enervantă.


13 B.V. Kernighan, D.M. Richie. Limba C. 13 Oricum, programatori experimentati ar trebui să poată extrapola materialul din acest capitol la propriile nevoi de programare. Începătorii ar trebui, în plus, să scrie similar mic programe independente. Atât aceștia, cât și alții pot folosi acest capitol ca un cadru pe care mai multe descrieri detaliate capitolele de început Introducere Singura modalitate de a învăța un nou limbaj de programare este să scrieți programe în el. Primul program care trebuie scris este același pentru toate limbile: tipăriți cuvintele: HELLO, WORLD. Aceasta este cea mai importantă barieră; pentru a-l depăși, trebuie să poți obține undeva un text de program, să îl compilați cu succes, să îl descărcați, să îl rulați și să aflați unde a ajuns rezultatul dvs. Odată ce stăpâniți aceste detalii tehnice, restul este relativ ușor. Programul de tipărire „HELLO, WORLD” în limbajul „C” este: MAIN () PRINTF(“HELLO, WORLD\N”); Cum să omiteți acest program depinde de sistemul pe care îl utilizați. În special, pe un sistem de operare „UNIX”, trebuie să rulați programul originalîntr-un fișier al cărui nume se termină în „.C”, cum ar fi HELLO.C, și apoi compilați-l cu CC HELLO.C Dacă nu ați făcut nimic greșit, cum ar fi lipsa unui caracter sau greșeala de ortografie, compilarea va continua fără mesaj și va fi creat fisier executabil numit a.out. Rularea acestuia la comandă va avea ca rezultat rezultatul A.OUT HELLO, WORLD Pe alte sisteme, aceste reguli vor fi diferite; verificați cu autoritatea locală. Exercițiul 1-1. Sari peste acest program pe sistemul tau. Încercați să nu activați diferite părți ale programului și vedeți ce mesaje de eroare primiți. Acum câteva explicații pentru programul în sine. Orice program „C”, indiferent de dimensiunea lui, constă dintr-una sau mai multe „funcții” care specifică


14 B.V. Kernighan, D.M. Richie. Limbajul C. 14 operațiuni efective pe calculator de efectuat. Funcțiile din limbajul „C” sunt similare cu funcțiile și subrutinele Fortran și cu procedurile PL/1, Pascal și așa mai departe. În exemplul nostru, această funcție este MAIN. De obicei, puteți numi funcțiile cum doriți, dar MAIN este un nume special; execuția programului dumneavoastră începe de la început cu funcția MAIN. Aceasta înseamnă că fiecare program trebuie să conțină undeva o funcție numită MAIN. Pentru a efectua anumite acțiuni, funcția MAIN se referă de obicei la alte funcții, unele dintre ele fiind în același program, iar altele în biblioteci care conțin funcții scrise anterior. O modalitate de a face schimb de date între funcții este prin argumente. Parantezele care urmează după numele funcției includ lista de argumente; aici funcția principală este fără argumente, care este specificată ca (). Declarațiile care alcătuiesc o funcție sunt cuprinse între acolade și care sunt analoge cu DO-END în PL/1 sau BEGIN-END în Valgol, Pascal etc. O funcție este apelată prin specificarea numelui acesteia urmată de o listă de argumente cuprinse între paranteze. nu sunt nici unul aici operatori CALL, ca la Fortran sau PL/1. Parantezele trebuie să fie prezente și atunci când funcția nu are argumente. String PRINTF("HELLO, WORLD\N"); este un apel de funcție care apelează o funcție cu numele printf și argumentul „hello, WORLD\N”. Funcția PRINTF este funcția de bibliotecă, care dă ieșire către terminal (cu excepția cazului în care este specificată o altă destinație). În acest caz, este imprimat un șir de caractere, care este un argument pentru funcție. O secvență de orice număr de caractere cuprinse între ghilimele duble „...” se numește „șir de caractere” sau „constantă șir”. Atâta timp cât folosim șiruri de caractere doar ca argumente pentru PRINTF și alte funcții. Secvența \N din linia de mai sus este notația „C” pentru „caracter de linie nouă”, care este folosită pentru a spune terminalului să sară la marginea stângă a următoarei linii. Dacă nu includeți \N (un experiment util), veți descoperi că rezultatul dvs. nu se va termina cu o linie nouă a terminalului. Utilizarea secvenței \N este singura modalitate de a introduce un caracter newline într-un argument la funcția PRINTF; dacă încerci ceva de genul PRINTF("HELLO, WORLD "); apoi compilatorul „C” va imprima mesaje de diagnosticare exagerate despre ghilimele lipsă. Funcția PRINTF nu oferă tranziție automată la o linie nouă, astfel încât să poată fi folosite mai multe referințe la aceasta asamblare în faze linia de ieșire. Primul nostru program care tipărește rezultate identice ar fi putut fi scris la fel de ușor ca


15 B.V. Kernighan, D.M. Richie. Limbajul C. 15 MAIN() PRINTF("HELLO, "); PRINT("LUME"); PRINT("\N"); Rețineți că \N reprezintă un singur caracter. „Secvențele” condiționate precum \N oferă un mecanism general și extensibil pentru reprezentarea caracterelor greu de tipărit sau invizibile. Alte caractere din „C” includ următoarele: \t pentru tab, \B pentru backspace, \" pentru ghilimele duble și \\ pentru backslash în sine. Exercițiul 1-2. Experimentați pentru a afla ce se întâmplă dacă șirul care este argumentul funcției PRINTF conține \X, unde X este un caracter care nu este inclus în lista de mai sus Variabile și aritmetică Următorul program tipărește următorul tabel cu temperaturi Fahrenheit și echivalentele lor centigrade Celsius, folosind formula C = (5/9)*(F-32) pentru a traduce. Acum programul în sine: /* PRINT TABEL FAHRENHEIT-CELSIUS PENTRU F = 0, 20 , ..., 300 */ MAIN() INT LOWER, UPPER, STEP; FLOAT FAHR, CELSIUS; JOAS=0; /* LIMITA INFERIORĂ A TABELULUI DE TEMPERATURĂ */


16 B.V. Kernighan, D.M. Richie. Limba C. 16 SUPERIOR =300; /* LIMITA SUPERIOARĂ */ PAS = 20; /* DIMENSIUNEA PASULUI */ FAHR = LOWER; CÂND (FAHR)<= UPPER) CELSIUS = (5.0/9.0) * (FAHR -32.0); PRINTF("% 4.0F %6.1F\N", FAHR, CELSIUS); FAHR = FAHR + STEP; Первые две строки /* PRINT FAHRENHEIT-CELSIUS TABLE FOR F = 0, 20,..., 300 */ являются комментарием, который в данном случае кратко поясняет, что делает программа. Любые символы между /* и */ игнорируются компилятором; можно свободно пользоваться комментариями для облегчения понимания программы. Комментарии могут появляться в любом месте, где возможен пробел или переход на новую строку. Вязыке"C" все переменные должны быть описаны до их использования, обычно это делается в начале функции до первого выполняемого оператора. Если вы забудете вставить описание, то получите диагностическое сообщение от компилятора. Описание состоит из типа и списка переменных, имеющих этот тип, как в INT LOWER, UPPER, STEP; FLOAT FAHR, CELSIUS; Тип INT означает, что все переменные списка целые; тип FLOAT предназначен для чисел с плавающей точкой, т.е. для чисел, которые могут иметь дробную часть. Точность как INT, TAK и FLOAT зависит от конкретной машины, на которой вы работаете. На PDP-11, например, тип INT соответствует 16-битовому числу со знаком, т.е. числу, лежащему между и Число типа FLOAT это 32-битовое число, имеющее около семи значащих цифр и лежащее в диапазоне от 10е-38 до 10е+38. Вглаве2 приводится список размеров для других машин. Вязыке"C" предусмотрено несколько других основных типов данных, кроме INT и FLOAT: CHAR символ один байт SHORT короткое целое LONG длинное целое DOUBLE плавающее с двойной точностью Размеры этих объектов тоже машинно-независимы; детали приведены в главе 2. Имеются также массивы, структуры и объединения этих основных типов, указатели на них и функции,которые их возвращают; со всеми ними мы встретимся в свое время.


17 B.V. Kernighan, D.M. Richie. Limbajul C. 17 De fapt, calculele din programul de conversie a temperaturii încep cu instrucțiunile de atribuire LOWER = 0; SUPERIOR=300; PAS = 20; FAHR=JOZ; care da variabilelor valorile lor initiale. fiecare afirmație individuală se termină cu punct și virgulă. Fiecare rând al tabelului este evaluat în același mod, așa că folosim o buclă care se repetă o dată pe rând. Acesta este scopul declarației WHILE: WHILE (FAHR<= UPPER)... проверяется условие в круглых скобках. Если оно истинно (FAHR меньше или равно UPPER), то выполняется тело цикла (все операторы, заключенные в фигурные скобки и). Затем вновь проверяется это условие и, если оно истинно, опять выполняется тело цикла. Если же условие не выполняется (FAHRпревосходит UPPER), цикл заканчивается и происходит переход к выполнению оператора, следующего за оператором цикла. Так как в настоящей программе нет никаких последующих операторов, то выполнение программы завершается. Тело оператора WHILE может состоять из одного или более операторов, заключенных в фигурные скобки, как в программе перевода температур, или из одного оператора без скобок, как, например, в WHILE (I < J) I=2*I; В обоих случаях операторы, управляемые оператором WHILE, сдвинуты на одну табуляцию, чтобы вы могли с первого взгляда видеть, какие операторы находятся внутри цикла. Такой сдвиг подчеркивает логическую структуру программы. Хотя в языке "C" допускается совершенно произвольное расположение операторов в строке, подходящий сдвиг и использование пробелов значительно облегчают чтение программ. Мы рекомендуем писать только один оператор на строке и (обычно) оставлять пробелы вокруг операторов. Расположение фигурных скобок менее существенно; мы выбрали один из нескольких популярных стилей. Выберите подходящий для вас стиль и затем используйте его последовательно. Основная часть работы выполняется в теле цикла. Температура по Цельсию вычисляется и присваивается переменной CELAIUS оператором CELSIUS = (5.0/9.0) * (FAHR-32.0);

18 B.V. Kernighan, D.M. Richie. C.18 Motivul utilizării expresiei 5.0/9.0 în locul celui mai simplu 5/9 este că în C, ca în multe alte limbi, la împărțirea numerelor întregi, apare trunchierea, care constă în eliminarea părții fracționale a rezultatului. Astfel, rezultatul operației 5/9 este zero și, desigur, în acest caz toate temperaturile ar fi zero. Punctul zecimal dintr-o constantă indică faptul că este de tip virgulă mobilă, deci 5.0/9.0 este același cu cât ne-am dorit, convertit în tipul FLOAT (în 32.0) înainte de scădere. Este logic din punct de vedere al stilului să scrieți constante flotante cu un punct zecimal explicit chiar și atunci când au valori întregi; acest lucru evidențiază natura lor plutitoare pentru vizualizatorul programului și se asigură că compilatorul vede lucrurile în același mod în care o faci tu. Regulile detaliate despre momentul în care numerele întregi sunt convertite în virgulă mobilă sunt date în Capitolul 2. Pentru moment, rețineți că testul de atribuire FAHR = LOWER; CÂND (FAHR)<= UPPER) работают, как ожидается, перед выполнением операций целые преобразуются в плавающую форму. Этот же пример сообщает чуть больше о том, как работает PRINTF. Функция PRINTF фактически является универсальной функцией форматных преобразований, которая будет полностью описана в главе 7. Ее первым аргументом является строка символов, которая должна быть напечатана, причем каждый знак % указывает, куда должен подставляться каждый из остальных аргументов /второй, третий,.../ и в какой форме он должен печататься. Например, воператоре PRINTF("%4.0F % 6.1F\N", FAHR, CELSIUS); спецификация преобразования %4.0F говорит, что число с плавающей точкой должно быть напечатано в поле шириной по крайней мере в четыре символа без цифр после десятичной точки. спецификация %6.1F описывает другое число, которое должно занимать по крайней мере шесть позиций с одной цифрой после десятичной точки, аналогично спецификациям F6.1 в фортране или F(6,1) в PL/1. Различные части спецификации могут быть опущены: спецификация %6F говорит, что число будет шириной по крайней мере в шесть символов; спецификация %2 требует двух позиций после десятичной точки, но ширина при этом не ограничивается; спецификация %F говорит только о том, что нужно напечатать число с плавающей точкой. Функция PRINTF также распознает следующие спецификации: %D для десятичного целого, %о для восьмеричного числа, %х для шестнадцатиричного, %с для символа, %S для символьной строки и %% - для самого символа %. Каждая конструкция с символом % в первом аргументе функции PRINTF сочетается с соответствующим вторым, третьим, и т.д. Аргументами; они должны


19 B.V. Kernighan, D.M. Richie. Limbajul lui C. 19 este consecvent ca număr și tip; altfel vei obține rezultate fără sens. Apropo, funcția PRINTF nu face parte din limbajul „C”; limbajul propriu „C” nu definește operațiunile I/O. Nici la funcția PRINTF nu este nimic misterios; este doar o caracteristică utilă care face parte din biblioteca standard de subrutine care este în mod normal disponibilă pentru programele „C”. Pentru a ne concentra asupra limbajului în sine, nu vom intra în detaliu despre operațiunile I/O până în Capitolul 7. În special, vom amâna introducerea formatului până atunci. Dacă trebuie să introduceți numere, citiți descrierea funcției SCANF din capitolul 7, secțiunea 7.4. Funcția SCANF este similară cu PRINTF în multe privințe, dar citește intrarea mai degrabă decât ieșirea de tipărire. Exercițiul 1-3. Transformați programul de conversie a temperaturii astfel încât să imprime un antet pentru tabel. Exercițiul 1-4. Scrieți programe pentru a imprima tabelul de conversie potrivit pentru Celsius în Fahrenheit FOR Instrucțiune După cum vă puteți aștepta, există multe moduri diferite de a scrie fiecare program. Să ne uităm la acest program de conversie a temperaturii: MAIN() /* FAHRENHEIT-CELSIUS TABLE */ INT FAHR; PENTRU(FAHR=0;FAHR<=300;FAHR=FAHR+20) PRINTF("%4D %6.1F\N", FAHR, (5.0/9.0)*(FAHR-32.0)); Эта программа выдает те же самые результаты, но выглядит безусловно подругому. Главное изменение исключение большинства переменных; осталась только переменная FAHR, причем типа INT (это сделано для того, чтобы продемонстрировать преобразование %D вфункцииprintf). Нижняя и верхняя границы и размер щага появляются только как константы в операторе FOR, который сам является новой конструкцией, а выражение, вычисляющее температуру по цельсию, входит теперь в виде третьего аргумента функции PRINTF, а не в виде отдельного оператора присваивания. Последнее изменение является примером вполне общего правила языка "C" в любом контексте, в котором допускается использование значения переменной некоторого типа, вы можете использовать выражение этого типа. Так как третий аргумент функции PRINTF должен иметь значение с плавающей точкой, чтобы соответствовать спецификации %6.1F, то в этом месте может встретиться любое выражение плавающего типа. Сам оператор FOR это оператор цикла, обобщающий оператор WHILE. Его функционирование должно стать ясным, если вы сравните его с ранее описанным


20 B.V. Kernighan, D.M. Richie. C.20 limbaj cu instrucțiunea WHILE. Declarația FOR conține trei părți separate prin virgulă. Prima parte a punctului cu FAHR = 0 este executată o dată înainte de a intra în bucla în sine. A doua parte este testul sau condiția care controlează bucla: FAHR<= 300 это условие проверяется и, если оно истинно, то выполняется тело цикла (в данном случае только функция PRINTF). Затем выполняется шаг реинициализации FAHR =FAHR + 20 и условие проверяется снова. цикл завершается, когда это условие становится ложным. Так же, как и в случае оператора WHILE, тело цикла может состоять из одного оператора или из группы операторов, заключенных в фигурные скобки. Инициализирующая и реинициализирующая части могут быть любыми отдельными выражениями. Выбор между операторами WHILE и FOR произволен и основывается на том, что выглядит яснее. Оператор FOR обычно удобен для циклов, в которых инициализация и реинициализация логически связаны и каждая задается одним оператором, так как в этом случае запись более компактна, чем при использовании оператора WHILE, а операторы управления циклом сосредотачиваются вместе в одном месте. Упражнение 1-5. Модифицируйте программу перевода температур таким образом, чтобы она печатала таблицу в обратном порядке, т.е. От 300 градусов до Символические константы Последнее замечание, прежде чем мы навсегда оставим программу перевода температур. Прятать "магические числа", такие как 300 и 20, внутрь программы это неудачная практика; они дают мало информации тем, кто, возможно, должен будет разбираться в этой программе позднее, и их трудно изменять систематическим образом. К счастью в языке "C" предусмотрен способ, позволяющий избежать таких "магических чисел". Используя конструкцию #DEFINE, вы можете в начале программы определить символическое имя или символическую константу, которая будет конкретной строкой символов. Впоследствии компилятор заменит все не заключенные в кавычки появления этого имени на соответствующую строку. Фактически это имя может быть заменено абсолютно произвольным текстом, не обязательно цифрами #DEFINE LOWER 0/* LOWER LIMIT OF TABLE */ #DEFINE UPPER 300 /* UPPER LIMIT */ #DEFINE STEP 20 /* STEP SIZE */



Cursul 2 Rybalka S.A., Shkatova G.I. Prelegeri despre C++ Tipuri de date de bază Principalele mijloace de stocare a datelor procesate de program sunt celulele de memorie. Toată memoria computerului este omogenă și

1 Lecția 5 1.1 Tipuri enumerate Limbajul C are facilități pentru definirea tipurilor enumerate. În general, declarația tipurilor enumerate arată astfel: de exemplu, enum (

Lucrări de laborator 1 Scopul lucrării: Să învețe să lucreze cu construcțiile sintactice de bază ale limbajului C. Să fie capabil să organizeze cicluri, să efectueze calcule. 1. PARTEA TEORETICĂ 1.1. Variabilele și tipurile lor

MINISTERUL STUDIILOR ŞI ŞTIINŢELOR DIN UCRAINA MAREA PRIMAR DECLARAŢIE INIŢIALĂ „UNIVERSITATEA NAŢIONALĂ ZAPORIZKY” Specialitatea 6.040302 Informatică Disciplina „Programare”

Lecția 2 Curs: „Dezvoltarea aplicațiilor pentru dispozitive mobile bazate pe Android” Tematica: Variabile, tipuri de date, operatori Schiță 1. Tipuri de date 2. Variabile. Constante și literale 3. Operatori 1. Concept

Numere întregi. Operațiuni cu biți Shokurov Anton V. [email protected] 16 februarie 2017 Versiune: 0.12 Abstract Numerele întregi au propriile lor specificuri. Folosit în aritmetica numerelor întregi, precum și pentru

Obiect Pascal Alfabetul limbajului Structura lexicala a limbajului Celula Valoare Constanta Variabila Operatori de atribuire Sistem de tip Expresii aritmetice Expresii booleene Expresii sir de caractere Obiect

Tema 5. Structura programului, expresii, operații, operatori 5.1. Structura programului. Programele din mediul de dezvoltare Delphi sunt construite pe principiile modularității. Un modul este un autocompilat

Lucrări de laborator 3 Tema: Structura programului în C. Funcții de intrare-ieșire. Progresul lucrărilor de laborator ar trebui reflectat în raport. Raportul trebuie să conțină o pagină de titlu, numere de post, coduri

Raport analitic privind rezultatele examenului de stat unificat Informatica și TIC în teritoriul Krasnodar 2014. Recomandări pentru 2015 Rezultatele generale ale examenului unificat de stat în informatică și TIC în 2014 Teritoriu Procentul de absolvenți care nu au promovat

46 V.L. Tarasov Prelegeri despre programarea C++ Cursul 3 Structura programului, control 3.1. Compoziția programului Un program C++ este format din funcții și variabile. Printre funcțiile oricărui program ar trebui

Lucrări de laborator 3 Programarea algoritmilor ciclici Scopul lucrării: consolidarea abilităților practice în lucrul cu sistemul Microsoft Visual Studio 2010, pentru a învăța să utilizeze corect diferiți operatori

CUPRINS INTRODUCERE 15 O nouă abordare a programării C++ 15 Cartea noastră este utilă atât pentru începători, cât și pentru programatori experimentați 15 Abstracție 16 Acoperire 16 Câteva cuvinte pentru C- și experimentați

Cuprins Introducere 16 Despre ce este această carte 16 CD inclus 16 Înțelegerea C++ 17 Convenții utilizate în carte 17 Cum este organizată această carte 18 Și mai multe... 18 Partea I: Noțiuni introductive despre C++ 18

Capitolul 2. Operatorii de control al limbajului S-a dovedit în teoria programării că un program pentru rezolvarea unei probleme de orice complexitate poate fi compus doar din trei structuri, numite urmărire, ramificare și buclă.

Subiectul 1.3 Operații în C Conversie de tip explicită și implicită. Operații de tip aritmetic. Conversia tipului în operațiunile de atribuire. Operații booleene. Operații simple și duble. Abordare

PRELEȚIA 4. TIPURI DE DATE Informații generale despre tipuri... 1 Fără declarații de tip variabilă... 2 Conversie automată a tipurilor... 3 Tipuri simple... 3 Numere întregi... 3 Numere în virgulă mobilă duble

1 Lecția 7 1.1 Evaluarea expresiei Luați în considerare câteva caracteristici ale evaluării expresiei în limbajul C. 1.1.1 Conversii de tip la evaluarea expresiilor Înainte de evaluarea operațiilor aritmetice, compilatorul

Cuprins PREFAŢĂ... 6 Capitolul 1 CONCEPTE DE BAZĂ ALE LIMBAJULUI... 10 1.1. Alfabet, identificatori, cuvinte de serviciu... 11 1.2. Literale... 14 1.3. Variabile și constante numite... 21 1.4. Operațiuni... 30

Subiect: Familiarizarea cu exercițiile C (C) SWITCH, BREAK, FOR, WHILE, DO WHILE, CONTINUE Conținut: SWITCH BREAK FOR WHILE DO WHILE CONTINUE exerciții

Subiectul 1.1 Tipuri de date de bază și agregate în limbajul C Următoarele tipuri de date sunt prezente în limbajul de programare C: Tip Mărime tipică în biți Interval minim permis de valori char 8 de la -127 la

Http://compscicenter.ru 1/21 Curs 2. Cum se execută programele C++ Alexander Smal CS Center 15 septembrie 2016 Sankt Petersburg http://compscicenter.ru 2/21 Tipuri de date Număr întreg: 1. caracter (caracter

8. * Programare structurată 8.1. Informații generale despre programarea structurată 8.1.1. Program și subprogram Programarea s-a dezvoltat intens de la mijlocul secolului trecut, formându-se în sfera

Lucrări de laborator 7 Corzi în С/С++ 1. Scopul lucrării: 1) Dobândirea deprinderilor practice la lucrul cu șiruri 2) Obținerea deprinderilor practice la trecerea șirurilor la funcții. 2. Informații teoretice scurte

Tehnologii de programare Curs Iarnă-Primăvara 9 Ternovoy Maxim Yurievich Ph.D.

2.5.3 Operatori Limbajul Java oferă o gamă largă de operatori care oferă programatorului control complet asupra construcției și evaluării expresiilor. Majoritatea operatorilor sunt

Subiectul 1.1 Matrice de date scalare Matrice în C++ O matrice este o structură de date reprezentată ca un grup de celule de același tip, unite sub un singur nume. Matricele sunt folosite pentru a gestiona mari dimensiuni

Lecție practică Tema: Mediu de programare. Scopul lucrării: Pentru a studia diferitele tipuri de date ale limbajului Pascal și operatorul de atribuire, învățați cum să creați programe simple pentru implementarea unui algoritm liniar.

Articolul a fost luat de pe Internet undeva pe Radiokot. Acest articol a fost scris de mine pentru a ușura sarcina celor care au decis să înceapă să învețe cum să lucreze cu LCD-uri populare pe controlerul HD44780. Am lucrat cu "live"

FGOBU VPO „SibGUTI” Departamentul de Sisteme Calculatoare PROGRAMARE LIMBAJE DE PROGRAMARE Matrice de date Lector: Conferentiar Catedra VS, Ph.D. Polyakov Artem Yurievich Departamentul de sisteme de calcul FGOBU

CURTEA 5. OPERATORI CONDIȚIONALI (OPERATORI DE SUCURSALA) Operații logice... 1 Operații de comparare... 3 Precedența operației... 5 Instrucțiune If - else... 5 If:... sintaxa instrucțiunii 5 Operator ternar?:...

Funcții Funcțiile sunt blocuri de cod care vă permit să efectuați aceleași operații pe diferite valori de date. Funcțiile sunt definite o singură dată și pot fi apelate de oriunde în aplicație.

Denisova E. V., Rakov S. V. Programare în limbaj C Sankt Petersburg; Sankt Petersburg GITMO (TU), 2003. 74p. Manualul oferă informații de bază pentru programare în limbajul algoritmic C. Un număr mare de exemple

OPȚIUNEA 1 1. Operatori pentru descrierea tipurilor de date, constantelor și tipurilor de date definite de utilizator în sistemele de programare în BASIC și FORTRAN. 2. Scrieți un program pentru a afla valoarea medie a elementelor unui dat

LAB 3. SCRIEREA SCRIPTURILOR BASH. SCOPUL LUCRĂRII Cunoașterea practică cu interpretul de script Bash. Sintaxa limbajului de scripting de bază. BASH SCRIPTS Parametri și variabile Înțelegerea unui parametru

Lucrări de laborator 0 Algoritmi de structură ciclică Scopul lucrării: obținerea deprinderilor practice în construirea algoritmilor de structură ciclică folosind limbajul C. Conținuturi Scurte informații teoretice...

MINISTERUL EDUCAȚIEI ȘI ȘTIINȚEI AL FEDERATIEI RUSE Instituția Autonomă de Stat de Învățământ Superior „UNIVERSITATEA POLITEHNICĂ DE CERCETARE NAȚIONALĂ TOMSK” General

Starea proceselor Să presupunem că programul a fost pre-asamblat într-un singur obiect autosuficient numit modul de încărcare. Într-un număr de sisteme de operare, programul este asamblat în momentul încărcării dintr-un număr mare de

Cursul 4 Operatori în JAVA Introducerea informațiilor de la tastatură Cel mai simplu mod de a introduce numere de la tastatură este utilizarea clasei Scanner. Această clasă aparține pachetului java.util. Prin urmare, să-l folosească

2 INTRODUCERE ÎN BAZA VISUALĂ PENTRU APLICAȚII Informatică 2 semestru Plan de curs 1. Macro-uri și limbajul VBA 2. Aspecte orientate pe obiecte ale VBA 3. Variabile și tipuri de date 4. Ramuri 5. Bucle 6. Funcții 7.

Tema 9. Tipuri. Tipuri structurate. Există patru tipuri structurate în Object Pascal: matrice, înregistrări, seturi și fișiere. Oricare dintre tipurile structurate se caracterizează prin multiplicitatea constituenților săi.

Sistemul de operare Linux Lectură 10 Limbajul de procesare a datelor AWK AWK (pronunțat „stejar”) este un limbaj de scriptare interpretat asemănător C pentru analizarea și procesarea linie cu linie a unui flux de intrare (de exemplu, un fișier text)

MINISTERUL EDUCAȚIEI ȘI ȘTIINȚEI AL FEDERATIEI RUSE Bugetul federal de stat Instituția de învățământ de învățământ superior Universitatea Tehnică de Stat din Saratov numită după Gagarin

Cursul 2 Algoritmi de ramificare. Algoritmi ciclici. Programarea expresiilor, metode numerice și informatică Alexander V. Pozdneev Departamentul de Automatizare a Facultății de Cercetare Științifică

Lucrări de laborator 2 Programarea algoritmilor de ramificare Scopul lucrării: să învețe cum să folosească corect instrucțiunea condițională if; învață cum să scrii programe pentru rezolvarea problemelor pe algoritmi de ramificare.

Alocarea memoriei Alocarea memoriei este procesul prin care elementelor individuale ale programului sursă li se atribuie adresa, dimensiunea și atributele zonei de memorie necesare pentru alocare.

Limbaje de programare și metode de traducere Introducere 1 Spectrul de limbaje de programare 2 Programele Cel mai mare divizor comun au fost scrise inițial astfel:

MINISTERUL EDUCAȚIEI ȘI ȘTIINȚEI AL FEDERATIEI RUSE Instituția Autonomă de Stat de Învățământ Superior „UNIVERSITATEA POLITEHNICĂ DE CERCETARE NAȚIONALĂ TOMSK”

Lucrări de laborator 3. Subrutine și stiva. Ciclul de instrucțiuni al procesorului. Scop: Implementarea subrutinelor. Cercetarea muncii microcomenzilor. Subrutinele și stiva Partea 1. În programare, există adesea situații în care

3. Influența arhitecturii Structura computerului 1. Date; 2. Operații elementare; 3. Gestionarea succesiunii de acțiuni; 4. Accesul la date; 5. Managementul memoriei; 6. Mediu de operare. 2 Stocarea datelor:

Scopul laboratorului de lucru 7 BASH SCRIPTING DE BAZĂ Obțineți elementele de bază ale scripturilor shell. 1. Informații teoretice 1.1. Gruparea comenzilor. Comanda Scripturi

Brian W. Kernighan, Dennis M. Ritchie
Limbajul de programare C
A doua editie
Laboratoarele Bell AT&T
Murray Hill, New Jersey
Prentice Hall PTR, Englewood Cliffs, New Jersey 07632
B. Kernighan, D. Ritchie
limbaj de programare C
Ediția a III-a, revizuită
Traducere din engleză, editată de Vs. S. Shtarkman
Dialectul Nevski, Sankt Petersburg 2001
UDC 681.3.06
BBC 24.4.9
K36
Traducere din engleza Vic. S. Shtarkman, editat de Vs. S. Shtarkman.
Kernighan B., Ritchie D.
K36 limbaj de programare C.\Trans. din engleză, ed. a III-a, corectată. - Sankt Petersburg: „Dialectul Nevski”, 2001. - 352 p.: ill.
Cartea unor autori cunoscuți, dezvoltatorii limbajului C, revizuită și completată pentru a ține cont de standardul ANSI pentru limbajul C, a cărei a doua ediție în limba engleză a fost publicată în 1988, a devenit de mult timp un clasic pentru toți cursanții și /sau utilizatori atât C cât și C++. Traducerea în limba rusă a acestei cărți a fost publicată pentru prima dată de Finanțe și Statistică în 1992 și de atunci a fost în căutare constantă în rândul cititorilor.
Pentru această a treia ediție în limba rusă, traducerea a fost verificată cu originalul, i-au fost aduse unele modificări, ținând cont de modificările de terminologie care au fost stabilite în ultimii ani, precum și de comentariile postate de autor pe site-ul pagina http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html
Pentru programatori, profesori și studenți.
Publicația a fost pregătită cu participarea editurii „Finanțe și Statistică”
ISBN 5-7940-0045-7 © 1998, 1978 de Bell Telephone Laboratories, Incorporated
ISBN 0-13-110362-8 (PBK)
1

ISBN 0-13-110370-9 (engleză) © „Nevsky Dialect”, 2001
Introducere
C este un limbaj de programare universal. Este strâns legat de sistemul UNIX, deoarece a fost dezvoltat pe acel sistem, care, la fel ca majoritatea programelor care rulează pe el, este scris în C. Cu toate acestea, limbajul nu este strict legat de niciun sistem de operare sau mașină. Deși se numește „limbaj de programare a sistemelor” pentru că este la îndemână pentru scrierea de compilatoare și sisteme de operare, s-a dovedit a fi la fel de bun pentru scrierea de programe mari de alt fel.
Multe idei importante în C sunt preluate din limbajul BCPL de Martin Richards. Influență
BCPL în C a fost indirect prin limbajul B dezvoltat de Ken Thompson în 1970 pentru primul sistem UNIX implementat pe PDP-7.
BCPL și B sunt limbi „fără tip”. În schimb, C oferă o varietate de tipuri de date. Tipurile de bază sunt caracterele, precum și numerele întregi și flotanți de diferite dimensiuni. În plus, este posibil să se obțină o întreagă ierarhie de tipuri de date derivate din pointeri, matrice, structuri și uniuni. Expresiile sunt formate din operatori și operanzi. Orice expresie, inclusiv atribuirea și apelul de funcție, poate fi o declarație. Pointerii furnizează aritmetica adreselor independente de mașină.
C oferă constructele de control de bază utilizate în programele bine structurate: instrucțiune compusă ((. . . )), ramificare condiționată ( dacă-altfel), alegând o alternativă dintre multe ( intrerupator), cicluri cu o verificare în partea de sus ( in timp ce, pentru) și cu o verificare mai jos ( do), precum și o facilitate de rupere a buclei ( pauză).
Ca rezultat, funcțiile pot returna valori ale tipurilor de bază, structurilor, uniunilor și pointerii. Orice funcție poate fi apelată recursiv. De regulă, variabilele locale ale unei funcții sunt „automate”, adică sunt create din nou de fiecare dată când este apelată.
Definițiile funcțiilor pot să nu fie imbricate, dar declarațiile variabilelor pot fi construite într-o structură de bloc. Funcțiile unui program C pot fi stocate în fișiere sursă separate și compilate independent. Variabilele în relație cu o funcție pot fi interne sau externe. Acesta din urmă poate fi disponibil într-un singur fișier sursă sau în întregul program.
Etapa de preprocesare realizează înlocuirea macro în textul programului, includerea altor fișiere sursă și compilarea condiționată.
C este un limbaj relativ „de nivel scăzut”. Cu toate acestea, acest lucru nu îi scade deloc meritele, doar că C se ocupă cu aceleași obiecte ca majoritatea computerelor, adică cu caractere, numere și adrese. Ele pot fi manipulate folosind operații aritmetice și logice efectuate de mașini reale.
Nu există operații directe în C asupra obiectelor compuse, cum ar fi șiruri de caractere, seturi, liste și matrice. Nu conține operațiuni care ar manipula matrice întregi sau șiruri de caractere,
deși structurile pot fi copiate în întregime ca obiecte individuale. Limbajul nu oferă niciun mijloc de alocare a memoriei, în afară de capacitatea de a defini variabile statice și mecanismul de stivă pentru alocarea spațiului pentru variabilele locale în cadrul funcțiilor. Nu există „grămadă” și „colector de gunoi” în el. În cele din urmă, în C în sine, nu există facilități I/O, instrucțiuni READ (citește) și WRITE.
(scriere) și orice metode de acces la fișiere. Toate acestea sunt mecanisme de nivel înalt care sunt furnizate în C numai prin funcții numite în mod explicit. Majoritatea sistemelor C implementate conțin un set standard rezonabil de aceste funcții.
În continuarea celor spuse, trebuie remarcat faptul că C oferă numai mijloace de control secvenţial asupra cursului calculelor: un mecanism de ramificare condiţionată, bucle, instrucţiuni compuse,
2

subrutine și nu conține instrumente de multiprogramare, procese paralele, sincronizare și organizare a corutinelor.
Absența unora dintre facilitățile enumerate poate părea un dezavantaj serios ("se dovedește că, pentru a compara două șiruri de caractere, trebuie să apelați o funcție?"). Cu toate acestea, compactitatea limbii are beneficii reale. Deoarece C este relativ mic, descrierea sa este scurtă și poate fi stăpânită rapid. Programatorul se poate aștepta în mod realist să cunoască, să înțeleagă și să folosească în mod regulat toate caracteristicile limbajului în practică.
Timp de mulți ani, singura definiție a C a fost prima ediție a limbajului de programare C. În 1983, Institutul Național American de Standarde (ANSI) a înființat un comitet pentru a dezvolta o definiție modernă cuprinzătoare a limbajului C. Rezultatul muncii sale a fost standardul pentru C ("ANSI-C"), lansat în 1988. Majoritatea prevederilor acestui standard au fost deja luate în considerare în compilatoarele moderne.
Standardul se bazează pe manualul de referință original. În comparație cu acesta din urmă, limba s-a schimbat relativ puțin. Unul dintre obiectivele standardului a fost să se asigure că, în majoritatea cazurilor, programele existente vor rămâne corecte sau vor determina modificarea comportamentului mesajelor de avertizare ale compilatorului.
Pentru majoritatea programatorilor, cea mai importantă schimbare este noua sintaxă pentru declararea și definirea funcțiilor. O declarație de funcție poate include acum o descriere a argumentelor sale. În conformitate cu aceasta, s-a schimbat și sintaxa definiției funcției. Informațiile suplimentare fac mult mai ușor pentru compilator să identifice erori legate de inconsecvențele argumentelor; în opinia noastră, aceasta este o completare foarte utilă la limbă.
Există, de asemenea, o serie de modificări minore de remarcat. Limbajul legalizează atribuirea structurilor și enumerărilor, care sunt utilizate pe scară largă de ceva timp. Calculele cu virgulă mobilă sunt acum permise și cu o singură precizie. Proprietățile aritmetice au fost rafinate, în special pentru tipurile nesemnate. Preprocesor îmbunătățit. Majoritatea programatorilor vor fi foarte puțin afectați de aceste modificări.
A doua contribuție semnificativă a standardului este definirea unei biblioteci furnizate cu compilatorul C, care specifică funcțiile pentru accesarea caracteristicilor sistemului de operare.
(de exemplu, fișiere de citire-scriere), I/O formatate, alocarea dinamică a memoriei, manipularea șirurilor de caractere etc. Un set de fișiere de antet standard oferă acces uniform la declarațiile de funcții și tipuri de date. Este garantat că programele care utilizează această bibliotecă atunci când interacționează cu sistemul de operare vor funcționa și pe alte mașini. Majoritatea programelor care alcătuiesc biblioteca sunt create în imaginea și asemănarea „bibliotecii standard I/O” a sistemului UNIX. Această bibliotecă este descrisă în prima ediție a cărții și este utilizată pe scară largă în alte sisteme. Și aici, programatorii nu vor observa diferențe semnificative. Deoarece tipurile de date și structurile de control ale limbajului C sunt suportate de comenzile majorității mașinilor existente, biblioteca de rulare care oferă lansare și execuție independentă a programelor este foarte mică. Apelurile la funcțiile bibliotecii sunt scrise de programator însuși (nu de compilator), prin urmare, dacă se dorește, pot fi înlocuite cu ușurință cu altele. Aproape toate programele scrise în C, atâta timp cât nu ating niciun detaliu ascuns în sistemul de operare, sunt portabile pe alte mașini.
C corespunde capabilităților hardware ale multor mașini, dar nu este legat de arhitectura unei anumite mașini. Cu o anumită disciplină, puteți scrie cu ușurință programe portabile, adică programe care pot rula pe diferite mașini fără nicio modificare.
Standardul oferă o modalitate de a descrie în mod explicit portabilitatea cu un set de constante care reflectă caracteristicile mașinii pe care va rula programul.
C nu este un limbaj „puternic tipizat”, dar controlul tipului a fost consolidat pe parcursul dezvoltării sale. În prima versiune de C, cel puțin nu a fost aprobat, dar a fost permis schimbul necontrolat de pointeri și numere întregi, ceea ce a provocat mari critici, dar acest lucru a fost de mult interzis. Conform standardului, acum este necesară o declarație explicită sau o specificație explicită a conversiei, care este deja implementată în compilatoare bune. Noul tip de declarație de funcție este un alt pas în această direcție. Compilatorul avertizează acum despre majoritatea erorilor de tip și nu efectuează automat conversii
3

date de tipuri incompatibile. Cu toate acestea, filozofia de bază a C rămâne că programatorii știu ce fac; limbajul necesită doar o indicare explicită a intențiilor lor.
C, ca orice alt limbaj de programare, nu este lipsit de defecte. Nivelul de prioritate al unor operatori nu este general acceptat, unele constructe sintactice ar putea fi mai bune. Cu toate acestea, după cum sa dovedit, C este un limbaj extrem de eficient și expresiv, potrivit pentru o clasă largă de probleme.
Cartea are următoarea structură.
Capitolul 1
este o prezentare generală a principalelor caracteristici ale limbajului C. Scopul său este de a încuraja cititorul să înceapă programarea cât mai curând posibil, deoarece credem că singura modalitate de a învăța o nouă limbă este să scrieți programe în ea. Această parte a cărții presupune cunoașterea elementelor de bază ale programării. Nu se oferă nicio explicație despre ce este un computer, compilație sau ce înseamnă o expresie ca n=n+1. Deși am încercat să arătăm tehnici de programare utile acolo unde este posibil, această carte nu se dorește a fi o referință pentru lucrul cu structuri de date sau cu algoritmi: atunci când s-a dovedit a fi necesar să alegem ce să subliniem, am preferat să ne concentrăm pe limbaj.
Capitolele 2-6 discută diferitele trăsături ale limbajului mai detaliat și ceva mai formal decât în ​​Capitolul 1; subliniind totodată exemplele care sunt mai degrabă programe complete decât fragmente izolate.
capitolul 2
introduce tipuri de date de bază, operatori și expresii. capitolul 3
mijloacele de control al succesiunii de calcule sunt luate în considerare: dacă-
altfel, intrerupator, in timp ce, pentru etc. capitolul 4
vorbim de funcțiile și structura programului (variabile externe, reguli de vizibilitate, împărțirea programului în mai multe fișiere sursă etc.), precum și de preprocesor. capitolul 5
se discută indicatorii și aritmetica adresei.
Capitolul 6
dedicat structurilor și asociațiilor.
Capitolul 7
este descrisă o bibliotecă standard care oferă o interfață comună cu sistemul de operare. Această bibliotecă este legalizată ca standard ANSI, cu alte cuvinte, trebuie să fie prezentă pe toate mașinile unde există C, astfel încât programele care folosesc I/O și alte caracteristici ale sistemului de operare să poată fi transferate de la o mașină la alta fără nicio modificare.
Capitolul 8
conține o descriere a interfeței dintre programele C și sistemul de operare UNIX, în special o descriere a I/O, sistemul de fișiere și alocarea memoriei. Deși unele secțiuni din acest capitol sunt specifice sistemului UNIX, programatorii care folosesc alte sisteme vor găsi în continuare o mulțime de informații utile în ele, inclusiv câteva informații despre cum este implementată o versiune a bibliotecii standard și câteva sugestii pentru portabilitatea programului.
anexa a
este un ghid lingvistic. O definiție strictă a sintaxei și semanticii limbajului C este conținută în documentul oficial al standardului ANSI. Acesta din urmă, însă, este cel mai potrivit pentru dezvoltatorii de compilatoare. Manualul nostru definește limbajul mai concis, fără a recurge la stilul juridic pedant pe care îl folosește standardul.
Anexa B
este un rezumat al conținutului bibliotecii standard și este destinat mai degrabă utilizatorilor decât implementatorilor. Anexa C
este prezentată o scurtă listă a diferențelor față de prima versiune a limbii. În cazuri îndoielnice, totuși, standardul și compilatorul pe care îl utilizați sunt judecătorul final al limbajului.
Capitolul 1 Prezentare generală a limbii
1.1 Să începem
1.2 Variabile și expresii aritmetice
1.3 Instruire
pentru
1.4 Constante numite
4

I/O 1.5 caractere
1.5.1 Copierea unui fișier
1.5.2 Numărul de caractere
1.5.3 Număr de linii
1.5.4 Număr de cuvinte
1.6 Matrice
1.7 Funcții
1.8 Argumente. Apel după valoare
1.9 Matrice de caractere
1.10 Variabile externe și domeniul de aplicare
Capitolul 2 Tipuri, operatori și expresii
2.1 Numele variabilelor
2.2 Tipuri și dimensiuni de date
2.3 Constante
2.4 Anunțuri
2.5 Operatori aritmetici
2.6 Operatori relaționali și logici
2.7 Conversii de tip
2.8 Operatori de creștere și decreștere
2.9 Operatori pe biți
2.10 Operatori și expresii de atribuire
2.11 Expresii condiționale
2.12 Prioritatea și ordinea de calcul
Capitolul 3 Management
3.1 Instrucțiuni și blocuri
3.2 Construcție
dacă-altfel
3.3 Construcție
altfel-dacă
3.4 Comutator
intrerupator
3.5 Cicluri
in timp ce
și
pentru
3.6 Ciclu
do
-in timp ce
3.7 Instrucțiuni
pauză
și
continua
3.8 Instruire
mergi la
și etichete
Capitolul 4. Funcţiile şi structura programului
4.1 Introducere în funcții
4.2 Funcții care returnează valori care nu sunt întregi
4.3 Variabile externe
4.4 Domenii de aplicare
4.5 Fișiere antet
4.6 Variabile statice
4.7 Înregistrați variabile
4.8 Structura blocului
4.9 Inițializare
4.10 Recursiune
4.11 C preprocesor
4.11.1 Includerea unui fișier
5

4.11.2 Înlocuirea macro-urilor
4.11.3 Compilare condiționată
Capitolul 5 Pointeri și tablouri
5.1 Indicatori și adrese
5.2 Indicatori de funcție și argumente
5.3 Pointeri și tablouri
5.4 Aritmetica adresei
5.5 Indicatori de funcție simbolică
5.6 Matrice de pointeri, pointeri către pointeri
5.7 Matrice multidimensionale
5.8 Inițializarea tablourilor de pointeri
5.9 Pointeri vs tablouri multidimensionale
5.10 Argumente ale liniei de comandă
5.11 Indicatori de funcție
5.12 Declarații complexe
Capitolul 6 Structuri
6.1 Înțelegerea structurilor
6.2 Structuri și funcții
6.3 Structura tablourilor
6.4 Indicatori către structuri
6.5 Structuri cu auto-referințe
6.6 Vizualizarea tabelelor
6.7 facilitate typedef
6.8 Asociații
6.9 Câmpuri de biți
Capitolul 7. Intrare și ieșire
7.1 I/O standard
7.2 Formatare ieșire (
printf
7.3 Liste de argumente cu lungime variabilă
7.4 Format de intrare (
scanf
7.5 Acces la fișiere
7.6 Gestionarea erorilor (
stderr
și
Ieșire
7.7 String I/O
7.8 Alte funcții ale bibliotecii
7.8.1 Operații cu șiruri
7.8.2 Parsarea clasei de caractere și transformarea caracterelor
7.8.3 Funcția
ungetc
7.8.4 Executarea comenzilor sistemului de operare
7.8.5 Gestionarea memoriei
7.8.6 Funcții matematice
7.8.7 Generator de numere aleatorii
6

Capitolul 8 Interfața cu sistemul UNIX
8.1 Descriptori de fișiere
8.2 I/O nivel inferior (citire și scriere)
8.3 Apelurile de sistem se deschid, creează, închid, deconectează
8.4 Acces aleatoriu (lseek)
8.5 Exemplu. Implementarea functiilor fopen si getc
8.6 Exemplu. Imprimarea catalogului
8.7 Exemplu. Alocator de memorie
Anexa A. Ghid de referință
A1. Introducere
A2. Convenții de vocabular
A2.1. Jetoane (
jetoane
A2.2. cometariu
A2.3. Identificatori
A2.4. Cuvinte cheie
A2.5. constante
A2.5.1. Constante întregi
A2.5.2. Constante simbolice
A2.5.3. Constante în virgulă mobilă
A2.5.4. Constante enumerate
A2.6. Literale șiruri
A3. Notarea de sintaxă
A4. Ce înseamnă identificatorii?
A4.1. Clasa de memorie
A4.2. Tipuri de bază
A4.3. Tipuri derivate
A4.4. Calificatori de tip
A5. Obiecte și Lvalue
A6. Transformări
A6.1. Boost întreg
A6.2. Conversii întregi
A6.3. Numere întregi și numere în virgulă mobilă
A6.4. tipuri de virgulă mobilă
A6.5. Conversii aritmetice
A6.6. Pointeri și numere întregi
A6.7. Tip de
gol
A6.8. Indicatori către
gol
A7. Expresii
A7.1. Generarea pointerului
A7.2. Expresii primare
A7.3. Expresii postfix
A7.3.1. Accesarea elementelor matricei
A7.3.2. Apel de funcție
A7.3.3. Structuri de referință
7

A7.3.4. Operatori de creștere și decrementare Postfix
A7.4. Operatori unari
A7.4.1. Operatori de creștere și decrementare prefix
A7.4.2. Operatorul de obținere a adresei
A7.4.3. Operator de acces indirect
A7.4.4. Operator unar plus
A7.4.5. Operator unar minus
A7.4.6. Operator de negație pe biți
A7.4.7. Operator boolean de negație
A7.4.8. Operator de dimensionare
dimensiunea
A7.5. Operator de distribuție
A7.6. Operatori multiplicativi
A7.7. Operatori aditivi
A7.8. Operatori de schimburi
A7.9. Operatori Relaționali
A7.10. Operatori de egalitate
A7.11. operator pe biți
Și
A7.12. Operator exclusiv pe biți
SAU
A7.13. operator pe biți
SAU
A7.14. operator boolean
Și
A7.15. operator boolean
SAU
A7.16. Operator condiționat
A7.17. Expresii de atribuire
A7.18. operator virgulă
A7.19. Expresii constante
A8. reclame
A8.1. Specificatorii clasei de stocare
A8.2. Specificatori de tip
A8.3. Declarații structurale și sindicale
A8.4. Enumerări
A8.5. Agenții de publicitate
A8.6. Ce înseamnă craitorii?
A8.6.1. Declaratori Pointer
A8.6.2. Declaratori de matrice
A8.6.3. Declaratori de funcții
A8.7. Inițializare
A8.8. Tastați nume
A8.9. Anunț
typedef
A8.10. Echivalența tipului
A9. Instrucțiuni
A9.1. Instrucțiuni etichetate
A9.2. Instruire de exprimare
A9.3. Instrucțiune compusă
A9.4. Instrucțiuni de selecție
A9.5. Instrucțiuni ciclice
A9.6. Instrucțiuni pentru săriți
A10. Reclame externe
A10.1. Definirea functiei
A10.2. Reclame externe
8

A11. Domeniul de aplicare și legăturile
A11.1. Domeniul lexical
A11.2. Conexiuni
A12. Preprocesare
A12.1. Trei secvențe de caractere
A12.2. Legarea șirurilor
A12.3. Definirea macro și extinderea macro
A12.4. Includerea fișierului
A12.5. Compilare condiționată
A12.6. Numerotarea liniilor
A12.7. Generarea mesajelor de eroare
A12.8. pragma
A12.9. Directiva goală
A12.10. Nume predefinite
A13. Gramatică
Anexa B. Bibliotecă standard
B1. Intrare ieșire:

B1.1. Operații pe fișiere
B1.2. format de ieșire
B1.3. format de intrare
B1.4. Funcții de intrare/ieșire a caracterelor
B1.5. Funcții I/O directe
B1.6. Funcții de poziționare a fișierelor
B1.7. Funcții de tratare a erorilor
B2. Verificări ale clasei de caractere:

B3. Funcții care operează pe șiruri:

B4. Funcții matematice:

B5. Funcții de uz general:

B6. Diagnosticare:

B7. Liste de argumente cu lungime variabilă:

B8. Traversări îndepărtate:

B9. Semnale:

B10. Funcții de dată și oră:

B11. Limite dependente de implementare:

și

  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva