Clonați-i înapoi și această prelegere vreau să vorbesc despre unele greșeli comune pe care le veți face în timp ce programați
și vedeți câteva dintre acestea pe care ați putea să le cunoașteți din provocările anterioare și deja ați
întâlnit aceste erori.
Dar acestea sunt cele mai frecvente tipuri de greșeli, primul este foarte evident că lipsește un semicolon, mai degrabă
decât toate afirmațiile din C se vor încheia într-un semi-colon.
Dacă nu aveți acolo, compilatorul se va plânge simplu.
Așadar, fie o deplasare necorespunzătoare a unui semicolon, fie lipsa unui punct și virgulă în întregime, este o eroare foarte obișnuită în acest
caz, greșim o punct și virgulă.
Avem o declarație if.
Puneți un semicolon la sfârșitul instrucțiunii.
Iar acest lucru determină comportamentul programului să fie complet diferit.
Acest lucru se va compila atunci când vă pierdeți punct și virgulă și nu aveți nici măcar inclus.
Nu se va compila.
Dar în acest caz, valoarea lui j va fi întotdeauna setată la 0 deoarece suma
pe care o cheamă în instrucțiunea IF a fost plasată astfel încât semi-colonul este perfect valabil să o aibă după declarația care reprezintă de
fapt declarația nulă și, prin urmare, nu aveți o eroare de la compilator, dar aceasta va cauza o problemă
deoarece J nu va fi niciodată setată la zero.
Și acest tip de greșeală poate fi obișnuit și în looping.
Când aveți o buclă și ați pus semi-colon la sfârșitul bucla pentru și apoi ați putea
avea un bracket se întâmplă în cazul în care nu aveți bracket pentru că aveți o eroare, dacă aveți bracket.
Foarte comun.
Un alt lucru este confuz de operator egal cu egal egal operator menționat în mod special că
egal egal operator nu este de fapt compair nu este de a compara corzi, astfel dacă utilizarea este egal egal și atunci când comparați șiruri
care nu este valabil el este doar de gând să compare referințele.
Dar dacă intenționați să atribuiți o variabilă unei valori unei variabile și, în schimb, utilizați egalitatea de
egalitate, veți avea un compilator.
Acum, dacă încercați să comparați două elemente ca două întregi în interiorul unei instrucțiuni if ​​și utilizați în schimb
operatorul de atribuire, de fapt, nu veți avea un compilator, dar nu veți merge vreodată.
Această expresie nu va merge niciodată la ea întotdeauna va fi evaluată la adevărat.
Deci, atunci când utilizați egal și nu utilizați egal este egal.
Acest lucru este de obicei făcut și dacă în timp ce declarația DO în interiorul expresiei booleene
și acest lucru este valabil, cu excepția faptului că are efectul de a atribui la ceva, spre deosebire de executarea ceva.
Deci, în acest exemplu, dacă avem un egal cu semnătura de astăzi, este întotdeauna setat la adevărat, deoarece este o afirmație adevărată deoarece
nu faci niciodată eșec când faci o misiune și astfel imprimarea va fi întotdeauna curând.
Ceea ce ați intenționat să faceți aici este să spuneți dacă un egal este egal cu doi.
Deci, este foarte obișnuit folosind equals, spre deosebire de egal cu egal și apoi nu au un compilator.
Dacă utilizați egalul este egal în situația greșită, este posibil să aveți și un comportament neașteptat.
Dar veți avea o eroare de compilator dacă sunteți dacă o utilizați în mod incorect pentru alocare.
Aveți grijă ca acest lucru să fie egal cu un set de egal egal cu omiterea declarațiilor prototipului.
Am menționat că este foarte important să vă declarați întotdeauna funcțiile în partea de sus a fișierului
înainte să le folosiți.
Cu toate acestea, acest lucru nu se întâmplă întotdeauna și este o greșeală foarte obișnuită și, de obicei, ceea ce se
va întâmpla este că veți obține o eroare de declarație implicită în compilator.
În acest exemplu, dacă ai definit rădăcina pătrată mai târziu în program,
atunci unde îl invocă sau în alt fișier și nu l-ai declarat explicit, vei avea niște avertismente.
Compilatorul va presupune că funcția returnează un int.
Este întotdeauna cea mai sigură să includeți declarația prototip în partea de sus pentru
toate funcțiile pe care le apelați fie explicit, fie implicit prin declararea corectă a fișierului antet corect în program.
Ei bine, atunci când nu includeți acel an acele declarații prototip puteți avea erori care nu includ fișierul antet care include
definiția unei funcții de bibliotecă de programare C care este utilizată în
program.
Deci, în acest caz doriți să reutilizați un anumit cod.
Poate că aveți funcția de imprimare pe care doriți să afișați o anumită ieșire, dar nu
includeți fișierul de antet lib standard.
Aceasta este o greșeală și de obicei va fi spus de către compilator că va fi implicită că
va exista o altă problemă de legătură cu această funcție.
Deci, în acest caz avem dublu răspuns egal cu valoarea rădăcină pătrată 1.
Dacă acest program nu include matematica din fișierul antet, aceasta va genera o eroare.
Rădăcina pătrată este nedefinită.
Va merge.
Încercați să conectați fișierele de obiecte.
Nu va avea nici un fel de matematică și se va spune că numiți o rădăcină pătrată, dar nu există nicio
implementare pentru ea.
Asigurați-vă că includeți anteturile corecte pentru toate invocările dvs. de funcții, în special din
biblioteca standard, care confundă o constantă de caractere într-un șir de caractere.
Deci, dacă avem text egal cu un singur citate intern care este un singur caracter atribuit
unui text de testare.
Dacă avem textul cu numele variabil, atunci atribuim în ghilimele duble.
Acesta este un pointer la șirul caracterelor.
Asta nu este faptul că nu este valabil pentru un singur caracter și de fapt, am vorbit despre constante șir în alocarea lor la matrice de caractere și cum nu puteți face acest lucru cu
egal și trebuie să le de fapt, le face cu copia de magazin și acest lucru
cazul în care spunem că textul este egal cu atribuirea unui pointer, iar acest lucru este de fapt nevalid și să vedem
ce ar trebui să faci este că ar trebui să faci
atacurile stelei, spunând egal sau Sturk sau copia magazinului.
Dacă nu doriți să-l atribuiți direct așa, dar veți obține doar folosind o citate internă versus un caracter în interiorul dublu-citate complet diferit caracter versus șir
în primul text text care în mod normal, declarată a fi o variabilă char și în al doilea
în cazul în care ar trebui să fie declarat B indicatorul de tip
la un char it dacă doriți să atribuiți o valoare la acel POINAR altul decât colțul în
sine ar trebui să dereference-l.
Acest lucru este de fapt incorect, deoarece dacă este un indicator în loc de a atribui o adresă pe care o semnați
un șir, astfel încât să nu aibă sens.
Folosind limitele greșite pentru o gamă de excepții de aici, declarăm o matrice integeră de 100 de
mărimi și apoi câteva variabile, iar altele cu doar câteva fiind inițializate și ne ducem prin bucla
noastră.
Spunem pentru egal ca unul este mai mic decât egal cu 100.
Asta e incorect, deoarece mărimea uneia din o sută înseamnă că există 100 de elemente în matrice.
Boder razor zero bazat.
Deci, primul Delma este 0 indicele maxim pe care îl puteți aloca sau accesa în matrice este de nouăzeci și nouă.
Aceasta va fi mai mică decât egală.
Deci o să aveți o greșeală a lui Audubon aici.
Acesta nu este un val de valori valid valabil, deoarece această buclă va merge până la 100.
Este, de asemenea, probabil incorect pentru că ați început la 1.
Dacă doriți cu adevărat ca primul element al acestei matrice să începeți de la zero pentru a rezerva un
X sau o locație într-un matrice pentru caracterul terminator null al unui șir este de asemenea o problemă obișnuită atunci când declarați caracterele dvs.
trebuie să fie suficient de mari pentru a conține caracterul terminator singur.
De aceea vă sugeram să nu puneți o dimensiune într-o matrice când o creați.
Dacă inițializați-o, ați pune numai mărimea acolo dacă nu îl inițializați.
Dacă creați inițializarea pe aceeași linie, vă recomandăm să faceți lucrul pentru dvs.
Acesta va pune automat mărimea potrivită și va include că la terminator null.
De exemplu, dacă aveți un șir de caractere numit Hello.
Aceasta este mai mult de cinci locații de memorie.
Sunt șase din cauza terminatorului nul de la capăt.
Nu uitați de dimensiunea rasei voastre.
Aceasta este o problemă obișnuită cu indicatorii pe care nu am discutat despre o
tonă, dar am vrut doar să menționez pentru că este foarte comun în parteneri când doriți să accesați
sau chiar într-un struct atunci când doriți să accesați ceva printr-un pointer .
Trebuie să utilizați liniuța mai mare decât simbolul utilizat atunci când accesați dreptul elementului indicator.
Deci, dacă aveți un pointer care indică o structură pe care o accesați.
Dacă aveți o structură care nu indică faptul că nu este un indicator.
Apoi îl accesați utilizând un punct dot operator.
De multe ori acest operatorul punct și această liniuță atunci mai mare decât este folosit în mod incorect punct pentru a nu pentru non pointeri
indicatori Dastyari mai mare ca acest lucru să devină clar în mai multe dintre exemplele noastre.
Omiterea ampersand-ului înainte de nonpoint sunt variabile și iscan de amintiri de apel poate apela așteaptă ca un pointer ca
al doilea argument.
Și aceasta înseamnă o adresă atunci când declarăm un tip de date o variabilă de tip int.
Nu este un indicator.
Deci, pentru ca Lifescan F să stocheze aceste date în variabilele noastre, trebuie să le transmitem ampersandului să
spună că este o adresă.
Deci, acest lucru este incorect.
Nu are ampersand înainte de număr și scanare f este al doilea argument nu este valabil tot timpul
când nu aveți ampersand este dacă utilizați un pointer ca un array de caractere toate argumentele de asociere după șir de formate
și scanare off trebuie să fie indicii .
Folosind o variabilă a indicatorului, de exemplu, inițializată.
Iată un exemplu de creare a unui pointer și apoi de a încerca să-l alocați.
Și aceasta este misiunea corectă în care semnezi o valoare pe care o dereferezi.
Dar ceea ce nu am făcut aici este că am inițializat indicatorul pentru a avea de fapt o memorie alocată
pentru asta.
Și nu puteți face acest lucru în C, puteți aplica doar operatorul de indirecție, care este asteriscul anterior, la o
variabilă pointer după ce ați setat variabila indicând undeva, astfel încât trebuie să fie îndreptat undeva chiar acum nu este
nu indică nicăieri pentru că nu a alocat nici o memorie.
Deci, punctul nu este niciodată pus la punct pentru nimic, astfel încât misiunea nu are sens.
Acest lucru ar duce de fapt la o segmentare.
Alte erori comune sunt îndeplinirea instrucțiunii de pauză la sfârșitul unui caz într-o instrucțiune de comutare.
Dacă pauza nu este inclusă la sfârșitul unui caz, execuția este continuată în următorul caz.
Așa că așa am vorbit acolo unde ai evaluat un caz.
Dacă nu aveți acea pauză acolo, merge direct la următorul caz și așteptați codul
în interiorul cazului următor.
Deci, întotdeauna vrei să ai pauze în declarațiile tale.
Există momente când doriți să aveți un caz de fals în alt caz și apoi
aceleași lucruri.
În acest caz nu ați avea nimic în declarația cazului.
Introducerea unui punct și virgulă la sfârșitul unei definiții de preprocesor de definire a preprocesorului reamintesc începe
cu numărul simbolul de lire sterline pe care preprocesorul este rulat înainte de compilator.
De obicei, pentru optimizare și deci nu aveți definiții corecte de sintaxă sau preprocesor, nu
trebuie să includeți un semi-colon.
Cu toate acestea, în C aveți obiceiul de a plasa întotdeauna un semi-colon după tot, dar trebuie să vă
amintiți că dacă definiți date constante pe care nu le aveți nevoie pentru unii pe care îl numesc acest lucru este incorect.
Aceasta va duce la o eroare de sintaxă dacă se folosește o expresie ca aceasta.
Deci, dacă încercați să utilizați acest lucru, definiți că va fi bine să aveți semicolonul la sfârșit, dar când se
execută preprocesorul, se va introduce exact ceea ce este și care va fi găsit, astfel încât acesta va
servi la sfârșitul datelor.
989 de colon.
Acesta este ceea ce compilatorul va vedea și va cauza o eroare.
Aceasta ar fi o eroare de sintaxă.
Omiterea parantezelor de închidere sau a ghilimelelor de închidere pe orice afirmație foarte frecventă.
Acest lucru este, de asemenea, în mod direct legat de paranteze de a avea o brățară de start curly și apoi nu se
termina brațul curl.
Același lucru cu parantezele în acest caz.
Avem două paranteze stânga inițiale sau trei avem două paranteze terminale pe care le lipsește și
paranteze drepte.
Aceasta ar fi o eroare de sintaxă pe care compilatorul o va găsi.
Deci, atunci când utilizați încorporarea în paranteze pentru a delimita fiecare porțiune a unei ecuații, aceasta face pentru o linie mai ușor
de citit de cod.
Doriți să utilizați paranteze, totuși doriți să vă asigurați că toate se potrivesc.
Ați început parantezele pe care trebuie să le încheiați în închiderea parantezelor aceleași cotituri curbate pe care ați început
coastele curl trebuie să aibă o încheietură curly curly.
Deci, fie aveți prea multe, fie prea puțin.
Dar KAMAHL se va plânge și acest lucru este foarte comun.
Deci, a doua linie aici lipsește și o marcă de referință de închidere.
Această declarație de tipărire pe care nu avem o claină compilabilă de terminare a apelurilor se plânge de asta.
Ambele vor genera un compilator uneori, deși compilatorul este foarte înșelător, deoarece nu știe exact unde apare eroarea, crede
că eroarea ar fi putut să apară pe o linie ulterioară.
Deci linia pe care ți-o spune acolo ar putea fi înșelătoare.
Așadar, în funcție de faptul dacă compilatorul folosește o paranteză sau un ghilimele pe
o linie ulterioară, va completa de fapt expresia respectivă.
Așa că vom muta aerul în altă linie.
Și asta o să se plângă și să spună asta cu erori.
Dar eroarea reală este mai ridicată deasupra locului în care ai uitat dacă vrei să o așezi.
Acestea sunt câteva greșeli comune pe care le văd mulți programatori C și sunt ușor de
rezolvat.
Și dacă le înțelegeți și le studiați, veți ști că nu le faceți să fie în regulă pentru a le face
ca pe un începător, dar pe măsură ce vă codificați din ce în ce mai mult și obțineți mai
multă practică, vă dați seama că nu am uitat paranteze Am uitat o coadă, t foloseste egalul egal este egal corect.
Știți că folosesc indicii incorecte.
Nu am alocat nici o memorie pe care o cunoști.
Toate aceste lucruri vor veni mai mult ca a doua natură.