>> [REPRODUCCI횙 DE M횣SICA]
>> ROB BODEN: Molt b챕.
Aix챠 que, primer el primer, de v챠deo a partir d'una cara coneguda.
>> [REPRODUCCI횙 DE V횒DEO]
>> -Molt b챕.
Aquest 챕s CS50, i aix챵 챕s l'inici de la tercera setmana.
Ho sento jo no podia ser-hi amb vosaltres avui, per챵 permeteu-me presentar-
Propi Boden Rob CS50.
>> [VIDEO PLAYBACK FI]
>> [Aplaudiments i crits]
>> ROB BODEN: La filmografia de que el v챠deo 챕s fant횪stic.
Est횪 b챕.
Aix챠 que primer, hi ha un altre dinar.
횋s dem횪 a les 01:15.
No hi ha dinar aquest divendres.
횋s amb Quora.
I Tommy encara no 챕s aqu챠, per챵 un la gent d'all횪 챕s excap CF,
Tommy McWilliam.
Aix챠 que ell 챕s un tipus divertit.
Vost챔 ha de venir.
>> Est횪 b챕.
Aix챠 que la setmana passada, vam comen챌ar trencar sobre el que una cadena 챕s en realitat.
Hem sabut des del principi que que 챕s una seq체챔ncia de car횪cters.
Per챵 la setmana passada, hem aprofundit en el fet que el que 챕s en realitat una seq체챔ncia de
personatges, b챕, ara tenim arranjaments de car횪cters.
I sabem que una cadena, que 챕s una matriu de personatges, al final,
tenim aquest byte nul especial, aquest barra invertida 0, que indica el final de
la cadena.
>> I aix챠, una cadena 챕s un arranjament de personatges, per챵 podem tenir m챕s de
nom챕s un conjunt de car횪cters, podem tenir una matriu de qualsevol
tipus de coses que volem.
Per tant, si vost챔 recorda de la setmana passada, el Programa d'Edat que David va introduir
molt r횪pid.
Aix챠 que el primer que farem 챕s demanar a l'usuari un nombre sencer, el
nombre de persones a l'habitaci처.
Un cop tinguem aquest sencer, estem declarant una matriu.
Observi aquesta sintaxi suport.
Vost챔 va a acostumar-se a aix챵.
>> Aix챠 que estem declarant una matriu d'enters diuen les edats, i hi ha n
sencers en aquesta matriu.
Aix챠 que aquest patr처 aqu챠, aquest abril int i 챕s igual a 0, i 챕s menor que n, i m챕s
a m챕s, que tamb챕 ser횪 un patr처 que vost챔 aconsegueix molt acostumat.
Perqu챔 aix챵 챕s m챕s o menys com ets sempre va a iterar sobre arrays.
Aix챠 que recorda que n 챕s el longitud de la nostra matriu.
Aix챠 que aqu챠, estem demanant repetidament per l'edat de la persona i a l'habitaci처.
>> Despr챕s d'aix챵, anem cap avall, i per qualsevol ra처 arbitr횪ria, llavors
imprimir l'edat que van a ser un any a partir d'ara.
I executar aquest programa, anem a fer edats, punt edats slash.
Aix챠 que el nombre de persones a l'habitaci처, diguem que hi ha tres.
I dir, la primera persona 챕s de 13, seg체ent 챕s 26, i l'첬ltim 챕s 30.
Aix챠 llavors va a iterar sobre els tres gent, imprimeixen 14, 27 i 31.
>> Aix챠 que recordi que quan declarem 1 matriu de grand횪ria n, els 챠ndexs en qu챔
matriu, la matriu t챕 valors i 챠ndexs 0, 1, 2, tot el cam챠
fins an almenys 1.
Aix챠 que quan ens va dir que hi havia tres persones en el quart, i el posem aqu챠
la primera iteraci처 a trav챕s d'aquest bucle, i ser횪 0.
Aix챠 que en l'챠ndex 0.
Estem assignant la primera Edat L'usuari introdueix.
Despr챕s, en el seg체ent, estem entrant en el segon n l'usuari entra, i en
al costat de dos, l'첬ltim n.
>> Aix챠 adonar que una matriu de mida tres no t챕 res
en l'챠ndex de tres.
Aix챵 no 챕s v횪lida.
Est횪 b챕.
Aix챠 que, tornant aqu챠.
Aix챠 que ara que hem tractat amb matrius, tenim certa familiaritat.
Ara anem a passar a comandaments arguments de la l챠nia, que seran
molt rellevants per a aquest conjunt de problemes.
>> Aix챠 que, fins ara, cada vegada que vost챔 t챕 declarar que la seva funci처 principal, que hem
va dir void main int.
Aix챠 buit nom챕s significa que no estem passant qualsevol
arguments d'aquesta funci처.
Ara anem a veure que la principal pot prendre alguns arguments.
Aqu챠 els anomenem int argc i els suports argv cadena.
Els suports, un cop m챕s, el que indica que estem tractant amb matrius.
Aix챠 que aqu챠, entre par챔ntesis argv cadena, estem es tracta d'una matriu de cadenes.
Aix챠 argc, aix챵 va a indicar quants arguments que hem
passat a aquest programa.
I per veure el que aix챵 significa, anem a tancar aix챵.
>> D'acord.
Aix챠 que, fins ara, ens hem quedat tots programa com les edats de la ratlla vertical de punts.
Podem tamb챕, en la l챠nia d'ordres, m챕s enll횪 passar arguments, d'aqu챠 el terme, la comanda
arguments de la l챠nia.
Aix챠 que el primer argument, hola m처n.
Aix챠 que aqu챠, argc seria 3.
횋s el recompte dels arguments en la l챠nia d'ordres.
Argc 챕s sempre almenys 1, des del punt retallar les edats, en si, que compta com un
els arguments de la l챠nia d'ordres.
>> Despr챕s hola 챕s la primera.
Si edats slash dot 챕s el zero, aleshores hola 챕s la primera, i el m처n 챕s la
segon argument de la l챠nia d'ordres.
Aix챠 que la cadena argv, anem a veure, cont챕 les cadenes, slash dot
edats, hola, i al m처n.
I, per la petici처 de David, anem per reproduir un v챠deo d'introduir.
>> [REPRODUCCI횙 DE V횒DEO]
>> -Fins ara, en els programes que hem per escrit, hem declarem
principal void main com int.
I tot aquest temps, aquest buit t챕 simplement s'especifica que el
programa no pren cap arguments de la l챠nia d'ordres.
En altres paraules, quan un usuari executa una programa, ell o ella pot proporcionar comanda
arguments de la l챠nia de l'escriptura addicional paraules o frases despr챕s del programa
nom en l'indicador.
>> B챕, si vost챔 no desitja que el seu programa per prendre arguments de l챠nia d'ordres, un o
m챕s d'aquestes paraules, hem de reempla챌ar anul 쨌 lar amb un parell d'arguments.
Aix챠 que anem a fer aix챵.
Inclogui CS50.h.
Inclogui io.h. est횪ndard
Int principal.
I ara, en lloc de buit, em vaig a especifiqueu un sencer anomenat argc i una
matriu de cadenes denominades argv.
Ara, argc i argv s처n simplement convencions.
>> Podr챠em haver cridat a aquests arguments m챕s el que vulguem.
Per챵 l'important 챕s que argc 챕s 01:00 int perqu챔, per definici처, 챕s
contindr횪 el nombre de l'argument, la nombre de paraules en total que l'
usuari ha escrit al seu sol 쨌 licitud.
argv, per la seva banda, l'argument de vectors, 챕s ser횪 en realitat una matriu d'emmagatzematge
totes les paraules que l'usuari t챕 escrit en la sol 쨌 licitud.
>> Anem a procedir a fer alguna cosa ara amb un o m챕s d'aquests
arguments de la l챠nia d'ordres.
En particular, seguirem endavant i imprimir qualsevol paraula que l'usuari
despr챕s del nom del programa en l'indicador.
Suport Obre.
Tancar suport.
Cent Printf s barra invertida i coma.
I ara he de dir-te printf quin valor per connectar a aquest marcador de posici처.
Vull que la primera paraula que l'usuari t챕 escrit despr챕s del nom del programa,
i per aix챵 em vaig a especificar argv suport 1, prop
par챔ntesi, punt i coma.
>> Ara, per qu챔 el suport 1 i que no suporti 0?
B챕, resulta que, emmagatzemada autom횪ticament en argv 0 ser횪 el
nom real del programa.
Aix챠 que la primera paraula que l'usuari despr챕s del nom del programa 챕s, per
convenci처, ser횪 emmagatzemat en argv 1.
Ara anem a compilar i executar aquest programa.
>> Fer argv 0, slash argv punt 0.
I ara una paraula com hola.
Intro.
I aqu챠 el tenim, hola.
>> [VIDEO PLAYBACK FI]
>> ROB BODEN: Molt b챕.
Tanca aquesta.
Aix챠 que fer una ullada a aquest programa que hem introdu챦t per a nosaltres, b챕,
per mostrar, si imprimim argv 0, marca, ara Qu챔 챕s, argv 0, slash argv punt 0.
Aix챠 que, com s'esperava, s'imprimeixi la el nom del programa, ja que 챕s argv 0
sempre ser횪 el el nom del programa.
Per챵 farem alguna cosa una poc m챕s interessant.
>> Aix챠, en el conjunt de problemes, vost챔 ser횪 introdu챦t a aquesta funci처, atoi.
Llavors, qu챔 챕s el que utilitzem per atoi?
Aix챵 va a convertir una cadena a un enter.
Aix챠 que si pas la cadena, un, dos, tres, a atoi, que ha de convertir en qu챔
al sencer, un, dos, tres.
Aix챠 que anem a convertir la primera l챠nia d'ordres argument en un enter,
i despr챕s simplement imprimir aquest sencer.
>> Aix챠 que, b횪sicament, estem una mica reimplementar getint, nom챕s el
sencer s'introdueix en la comanda l챠nia en lloc de en el programa
interactiva.
Aix챠 doncs, fent argv 0, farem que aqu챠, i tancar aquesta.
Llavors, executar argv 0, i entrarem en el nombre enter, un dos tres, quatre un dos.
Aix챠 que va a imprimir el nombre enter, un dos tres quatre un dos.
Hi ha algunes subtileses que atoi que que deixar횪 de preocupar de res
m챕s enll횪 d'un car횪cter num챔ric v횪lid, per챵 aix챵 no importa.
>> Llavors, qu챔 creus que passa si faig aix챵?
Decisi처 de segmentaci처.
Llavors per qu챔 챕s aix챵?
Si un mira cap enrere en el nostre programa, estem convertir argv 1, el primer argument
despr챕s que el nom del programa, a un enter.
Per챵 no hi ha un argument que es passa despr챕s que el nom del programa.
Aix챠 que aqu챠, veiem que es tracta d'un buggy programa, ja que, si tractem d'executar
sense cap argument, simplement es penjar횪.
>> Aix챠 que un altre patr처 com첬 veur횪s 챕s com, si argc 챕s menys
de dos, el que indica que no hi havia almenys el nom del programa i una
primer argument, llavors farem alguna cosa com printf, no n'hi ha prou
arguments de la l챠nia d'ordres.
Aix챵 probablement no 챕s una bona per imprimir, 챕s probable que sigui alguna cosa, com
haur횪 d'ingressar un nombre enter en la l챠nia d'ordres.
Vaig a acabar all횪.
I despr챕s tornar 1.
Aix챠 que recordi que al final de la nostra programa, si tornem 0, aquest tipus de
indica l'챔xit.
I principal tamb챕 autom횪ticament retorna 0 si no ho fa.
>> Aix챠 que aqu챠, estem resintonitzar 1 per a indicar que aquest no 챕s l'챔xit.
I vost챔 pot tornar el que vulguis, simplement, 0 indica l'챔xit, i
res indica frac횪s.
Aix챠 que anem a executar aquesta versi처 de les coses.
Aix챠 que ara, si no entrem en una l챠nia d'ordres argument, et dir횪 correctament
nosaltres, no la l챠nia d'ordres suficient.
No va acabar la frase.
Si no, si realment vam passar una, pot completar el programa.
Aix챠 que aix챵 챕s com es pot utilitzar argc en tal de validar el nombre de
Arguments de l챠nia de comandes que repercussi처 efectiva.
>> Aix챠 que farem d'aquest programa una mica m챕s complicat, i mirar a la segona
iteraci처 de les coses.
Aix챠 mateix, estem no nom챕s imprimir el primer argument de la l챠nia d'ordres.
Aqu챠, estem iterant d'iguals i int 0, i 챕s menor que argc, i m챕s
m챕s, i argv impressi처, l'챠ndex i.
Aix챠 que aquest patr처, de nou, aquesta 챕s la mateixa patr처 com abans, excepte que en lloc
de cridar a la variable n, estem usant argc.
>> Aix챠 que aquesta 챕s la iteraci처 a cada 챠ndex en la matriu, i la impressi처 de cada
element de la matriu.
I per aix챵, quan ens trobem aquest programa, b챕, No vaig entrar a qualsevol l챠nia d'ordres
arguments, de manera que nom챕s imprimeix el nom del programa.
Si entro en un munt de coses, que va a imprimir un, cadascun en la seva pr챵pia l챠nia.
>> D'acord.
Aix챠 que anem a fer un pas m챕s enll횪.
I en lloc d'imprimir cada argument en la seva pr챵pia l챠nia, anem a imprimir cada
car횪cter de cada argument en la seva pr챵pia l챠nia.
Aix챠 que recordi que argv 챕s una matriu de cadenes.
Llavors, qu챔 챕s una cadena, per챵 una matriu de car횪cters?
Aix챠 que aix챵 significa que argv 챕s realment una conjunt d'una matriu de car횪cters.
Aix챠 que aprofitant que, anem a ignorar aix챵 per ara.
Anem a considerar la cadena argv 0.
>> Aix챠 que si volem portar a cada car횪cter de argv 0 en la seva pr챵pia l챠nia, llavors vull
per fer el patr처 del que estem acostumats, i 챕s menys de la longitud de la matriu,
que en aquest cas, 챕s de strlen, aix챵 챕s no el que jo vull fer, cadena
s 챕s igual a argv 0.
Aix챠 que i 챕s menor que la longitud del nostre matriu, que en aquest cas 챕s una matriu
de personatges, i m챕s plus.
I aix챠, com vam veure la setmana passada, 챕s ideal si ens movem que strlen fora
de la condici처, ja que n ser횪 l'addici처 de el strlen de s cada vegada que anem
a trav챕s del bucle, i 챕s No estar횪 canviant.
Aix챠 que anem a establir 챕s igual a n per aqu챠.
>> D'acord.
Aix챠 mateix, estem interactuant sobre cada 챠ndex de la matriu.
I per aix챵, si volem imprimir cada car횪cter en aquesta matriu, per cent c 챕s
la bandera que volem utilitzar per als car횪cters.
I ara una i suport ser횪 el cadena, car횪cter d'챠ndex i, pel que si el
cordes eren hola.
Llavors S 0 ser횪 H, S suport 1 haur횪 de correu, i aix챠 successivament.
>> Aix챠 que ara volem combinar aquestes dues coses.
Volem imprimir cada car횪cter de cada argument de la l챠nia d'ordres.
Aix챠 que tindrem un bucle For niat.
I convencionalment, el primer comptador S처c jo, el proper ser횪 j, n
ser횪 el strlen de argv i, i 챕s menor que n, i m챕s plus.
I ara en lloc d'imprimir argv i, pel que argv suport i va a la llista -
que ser횪 la l챠nia d'ordres-i th argument argv i, j es va a
ser el car횪cter j-챔sim de l'argument-i.
Em desfar챕 d'aix챵 aqu챠 i ara ja que ens posem en aquest bucle.
Aix챠 que 챕s equivalent als iguals de corda s argv i, i despr챕s s suport de j.
>> B챕, nosaltres no hem de declarar aquest s variable.
En lloc d'aix챵, nom챕s haurem de combinar aquests 2 en el que ten챠em, argv i, j.
>> ALTAVEU 1: [inaudible].
>> ROB BODEN: B챕 dit.
Aix챠 que aix챵 est횪 trencat.
Si jo en realitat va c처rrer, ho far챠em s'han adonat d'aix챵.
Aix챠 que el comptador que m'importa en aquest particular per
bucle 챕s j, l'iterador.
Aix챠 que caldria tingui problemes, probablement un bucle infinit, si ens
no havia fixat que.
횋s per aix챵 que tamb챕 estem parlant sobre la depuraci처 d'avui.
>> D'acord.
Aix챠 que anem a executar aquest programa.
I siguem realment afegir un printf separada aqu챠 que s'acaba d'imprimir
altra l챠nia, ja que aix챵 significa quan executar el programa, hi haur횪 un espai en blanc
l챠nia entre cada car횪cter de cada argument de la l챠nia d'ordres.
B챕, anem a veure el que aix챵 significa.
Oop.
Tens algun error.
Error impl챠citament declarant funci처 de biblioteca strlen.
>> Tornant al nostre programa, que es va oblidar d'incloure el hash string.h.
Aix챠 string.h ser횪 el arxiu de cap챌alera que declara
la funci처 strlen.
B챕, que compila.
Ara, anem a executar-lo.
Aix챠 que aix챵.
Es va a imprimir el nostre nom del programa, hola m처n.
Es va a imprimir cada cosa, cada car횪cter, en la seva pr챵pia l챠nia.
D'acord.
>> Aix챠 que aprofitarem aquesta realitat un pas m챕s enll횪.
I en lloc d'utilitzar string.h, anem a pensar en com ens agradaria implementar la nostra pr챵pia
funci처 strlen.
Aix챠 que em vaig a donar immediatament una firma de funci처.
Aix챠 que anem a trucar en my_strlen, i 챕s Va a prendre una cadena com a argument,
i esperem tornar l' longitud d'aquesta cadena.
Aix챠 que, on 챕s aquest tipus?
S챠
D'acord.
Aix챠 que recordi de la diapositiva anterior que Tamb챕 va ser de la setmana passada, que un
arranjament de car횪cters, aix챠, una cadena, aix챠 que diguem que aquesta 챕s la nostra cadena s.
Aix챠 que si s 챕s la cadena, hola, a continuaci처, H-I-L-L-O, a la mem챵ria, que va a
ser, i tot seguit, aquesta barra invertida 0 car횪cter.
>> Llavors, com fem perqu챔 la longitud de s?
B챕, el truc est횪 a la recerca d'aquest 0 contraatac car횪cter, aquesta nul
terminador.
De manera que l'algorisme es va a ser alguna cosa aix챠 com uns pocs
suficients car횪cters que -
anem a fer aquesta m횪 representen alguns taulell, anem a trucar a aquesta longitud int.
Aix챠, a partir d'aqu챠, estem va a iterar sobre la nostra cadena.
>> Aix챠 que el primer car횪cter, 챕s H, i no 챕s de nou slash 0, de manera que
la longitud 챕s 1.
Iterar fins al seg체ent car횪cter, I, i no 챕s la barra invertida 0.
La longitud 챕s de 2.
L, 3.
L, 4.
O, 5.
I, finalment, arribem a la barra invertida 0, de manera que aix챵 significa, aix챠,
aquesta cadena ha acabat.
Aix챠 que anem a tornar maig.
>> Aix챠 que en realitat l'aplicaci처 que, en primer lloc, la meva longitud n 챕s igual a 0, la m횪 dreta.
I repetirem -
>> ALTAVEU 1: [inaudible]
>> ROB BODEN: Oh, disparar.
Bona decisi처.
Boom.
Aix챠 longitud n 챕s igual a 0.
Aix챠 que ara, la durada, per s no igual i despr챕s, la barra invertida 0.
Aix챠 que recordi, aquesta barra invertida 0, es tracta d'una car횪cter real, i indica
al final de la cadena.
Igual que, tamb챕, la barra invertida n 챕s un personatge real.
Backslash 0 indicar횪 Al final de la nostra cadena.
No vull posar aix챵 aqu챠.
I mentre que s indexats per la longitud no 챕s igual al terminador nul,
nom챕s anem a incrementar la longitud.
Aix챠 doncs, al final del nostre programa, longitud finalment es va a
ser 5 en aquest cas.
I acabem tornarem longitud.
>> D'acord.
Aix챠 que ara aqu챠, no ho s챕 fer my_strlen.
Anem a compilar per assegurar tot funciona sense problemes.
Estava fent en 2?
O era que 1?
Aix챵 hauria de ser suficient.
Est횪 b챕.
Aix챠 que aix챵 챕s argv 2.
Funciona com s'esperava, tot i era que el que jo feia a?
S챠
D'acord.
Aquesta versi처 del que no tenia la l챠nia nova despr챕s de printf, per챵
no fa cap difer챔ncia.
D'acord.
Aix챠 va treballar com s'esperava.
>> Ara fins i tot podem combinar aquesta un pas A m챕s, quan resulti av챠s aqu챠, b챕,
primer, estem agafant el strlen de argv i, i llavors estem interactuant sobre
cada car횪cter en la cadena.
Aix챠 que en comptes de fer aix챵, i si ens simplement combinar aquesta l챵gica de l'espera
fins que arribem a la barra invertida 0 dret en aquest bucle?
Aix챠 iterar mentre argv i, j fa 챕s igual a 0 barra invertida.
Aix챠 que anem a executar en primer lloc.
>> Est횪 b챕.
Aix챠 que aqu챠, aquesta condici처 est횪 dient -
anem a aclarir aix챵.
Aix챠 que ara, que aix챵 sigui la nostra argv.
Aix챠 que quan m'acaba d'executar aquest programa abans, argv 챕s una matriu de cadenes.
I aix챠, si ho executo amb argv slash dot 2, hola m처n, llavors el argv
si 챕s la longitud 3, per argv zero, hola, i al m처n.
>> I dins de cada un d'aquests 챠ndexs, 챕s a dir, en si una matriu, on aix챵 ser횪
punt, aix챵 ser횪 slash, no s챕 si aquesta era la direcci처 correcta, em
no crec que era.
A-R-V tauler, necessita m챕s espai.
Anem a tallar a la matriu.
Tauler 0, i despr챕s barra invertida 0 A-R-V.
I llavors en el caos ser횪 hola.
Diguem, H-I barra invertida 0.
I, finalment, W-O barra invertida 0.
>> De manera que l'algorisme que nom챕s escrivim, el niu bucles, el que estan
fent 챕s, en primer lloc tenim la comptador i i j a continuaci처.
Aix챵 seria m챕s f횪cil amb codi en el pantalla, Tornem a aix챵.
D'acord.
Llavors noto que i 챕s l'iterador que 챕s iterar sobre cada comanda
argument de la l챠nia.
I j 챕s la iteraci처 iterador sobre cada car횪cter en qu챔
argument de la l챠nia d'ordres.
Aix챠 que el que aix챵 printf m챕s interna est횪 fent 횋s a dir, tenim printf argv 0 0, printf
argv 0 1, printf argv 0 2 0 3 0 4, 0 5, 6 0, per챵 ara, argv 0 7 va a
igualtat de barra invertida 0.
>> Aix챠 que vam sortir d'aquest bucle, i ara itera a 1.
I ara anem a imprimir argv 1 0, argv 1 1 -
b챕, ara, des que em vaig tallar hola curta, argv febrer 1 El nou ser횪
barra invertida 0.
I aix챠, s'incrementa i i continuar, i aix챠 successivament, fins que ens imprimim tots
m처n, i els tres s처n de l챠nia d'ordres arguments, i anem a sortir del
el bucle m챕s extern, i acabar el nostre programa.
D'acord.
>> Aix챠 que anem a arribar fins aqu챠.
Aix챠 obtindr횪 una certa familiaritat amb arguments de la l챠nia de comandaments en aquest
conjunt determinat problema.
>> Ara, la depuraci처.
Aix챠 que 챕s probable que ja hagi hagut de fer certa depuraci처 amb el seu anterior
estableix problema.
I una manera molt f횪cil de depuraci처, en primer lloc, donem una ullada a un programa de buggy.
B챕, caminar a trav챕s d'aquest programa, anem a demanar a l'usuari per a una
sencer, agafa aquest sencer, i despr챕s, arbitr횪riament, tenim un bucle while que
nom챕s va a disminuir i fins que sigui igual a 10.
Anem a suposar que estic introduint un nombre enter m챕s gran que 10.
Aix챠 decrement i fins que sigui igual a 10.
>> I despr챕s tenim un altre bucle while que, si b챕 i no 챕s igual a 0, estem
disminuir횪 en un 3 i.
Aix챠 que si veus la intenci처 de l'error aqu챠, 챕s que aix챵 va a decrementar i per
ser 10, i llavors aquesta voluntat bucle while i decrement del 10, a 7, a 4, a 1,
a negatiu 2, 5 a negatiu, i aix챠 successivament, fins a l'infinit negatiu, ja que vaig a
En realitat mai de ser igual a 0.
I despr챕s, al final d'aquest programa, tenim la funci처 foo que 챕s
passant impressi처 que jo.
>> Aix챠 que aquest 챕s un programa curt i trivial, i l'error 챕s obvi,
sobretot despr챕s que acabo de va dir quin era l'error.
No obstant aix챵, la intenci처 aqu챠 챕s, b챕, aix챵 podria realment es veuen com a part de la seva
solucions de cobdiciosos de l'첬ltima conjunt de problemes, i que per tant no tingui
alguns bucle infinit en el seu programa, i no tens ni idea
Qu챔 est횪 causant.
Aix챠 que una t챔cnica de depuraci처 molt 첬til 챕s afegir nom챕s printfs
tot el seu codi.
>> Aix챠 que aqu챠 vull un printf fora primer bucle while.
I jo vull un printf, i jo nom챕s vaig a imprimir i.
Fins i tot em vaig a fer primer while, i.
A l'exterior, mentre que el segon bucle.
Un cop m챕s, imprimiu l'interior d'aqu챠, el valor de i.
I anem a c처rrer aix챵.
>> Debug slash Aix챠 punt.
Introdu챦u un nombre enter.
Farem 13.
I de cop.
Veiem que estem bucle infinit dins del segon bucle while.
Aix챠 que ara que sabem el que l'error 챕s.
Per챵 la depuraci처 printf 챕s perfectament b챕, per챵 una vegada que els seus programes obtenen
m챕s llarg i complicat, hi ha solucions m챕s sofisticades a
fer les coses de treball.
Aix챠 que anem a eliminar tots aquests printfs.
I anem a fer que no ho vaig fer trencar res.
D'acord.
>> Aix챠 que el programa que anem introduir s'anomena
GDB, per a GNU depurador.
B챕, en realitat, anem a eliminar de depuraci처 per una segona, i fer de depuraci처 de nou.
B챕, en realitat en primer lloc, una bona lli챌처 en els arguments de l챠nia de comandes.
Tingueu en compte que aquesta comanda Clang 챕s compilar tot s'est횪 passant
en la l챠nia d'ordres, aquests valors arguments de la l챠nia d'ordres.
Llavors, com es va a utilitzar arguments de la l챠nia d'ordres, com es
ho va fer abans, i el que vulguis en PSET 2, aix챠 챕s com Clang els est횪 utilitzant.
>> Aix챠 que adonar-se que aquesta primera bandera, gui처 ggdb3, el que est횪 dient 챕s: Clang,
vost챔 ha compilar aquest arxiu amb el intenci처 que amb el temps es
necessari per depurar.
Aix챠 que, mentre vost챔 t챕 aquesta bandera, llavors podem GDB depuraci처.
I va obrir el depurador de GNU.
>> Aix챠 que hi ha una gran quantitat d'ordres que ha de acostumar.
El primer que probablement immediatament necessitar est횪 a Executar.
Llavors, qu챔 챕s Executar far횪?
Aix챵 va a comen챌ar el nostre programa.
Correu de tal manera, en iniciar el programa, el programa ens demana un nombre enter de 13.
I llavors 챕s un bucle infinit com era d'esperar, excepte Vaig treure el
printfs, de manera que ni tan sols veiem aix챵.
Va sortir amb normalitat.
Oh.
횋s possible que envolta tot el rev챕s, de nou a - ignorar aix챵.
Suposem que no sortir normalment.
Hi ha una resposta complicada que aix챵.
>> Aix챠 que ara, aix챵 no 챕s molt 첬til.
Pel que nom챕s s'executa nostre programa a l'interior de Aquest depurador no ens ajuda en qualsevol
manera, ja que podr챠em haver fet dot slash depuraci처 des de fora del BGF.
Aix챠 el comandament que probablement et -
i vaig a sortir d'aquesta.
-Control d o deixar de fumar, tant a la feina.
Aix챠 que anem a obrir de nou.
>> Una altra ordre que probablement immediatament voler
acostumar 챕s Break.
Aix챠 que anem a trencar el principal, per ara, i despr챕s vaig a explicar aix챵.
B챕, aqu챠 veiem establim un punt d'interrupci처 en aquesta l챠nia en debug.c.
Llavors, qu챔 significa ruptura 챕s que quan escriure executar, el programa va a
continuar횪 funcionant fins que Em va colpejar un punt d'interrupci처.
Aix챠 que quan vaig arribar a l'execuci처, el programa s'inicia, i tot seguit, es trenca tan aviat com es
entra en la funci처 principal.
Trencar principal ser횪 una cosa vost챔 bastant com첬 fa.
>> I ara, per presentar- a alguns m챕s ordres.
Noteu aqu챠, que est횪 dient que es va trencar en la l챠nia 11, que 챕s
printf, introdu챦u un enter.
Llavors la comanda seg체ent ser횪 la forma en ens anem a la seg체ent l챠nia de codi.
Aix챵 permetr횪 que fem un pas a trav챕s de la nostra l챠nia de programa per l챠nia.
Aix챠 que la propera.
>> Ara la l챠nia 12, que anem per obtenir el nombre enter.
Seg체ent.
I si simplement premeu la tecla Enter de nou, que va a refer l'첬ltima cosa que va fer.
Aix챠 que no he d'escriure al costat cada vegada.
Aix챠 que entrar en un enter de 13.
Aix챠 que ara, la l챠nia 14, mentre que i 챕s m챕s gran de 10, i far챕 tot seguit.
I veiem que anem a disminuir i.
Aix챠 que anem a disminuir i de nou.
>> Aix챠 que ara, una altra utilitat comanda 챕s Imprimeix.
Aix챠 impressi처 es va a imprimir el valor de la variable.
Anem a posar de manifest el valor d'i variable.
Anem a imprimir i.
Es dir횪 i 챕s 11.
Ara estem de nou en Seg체ent, mentre i 챕s m챕s gran que 10.
Aix챠 que 챕s encara m챕s gran que 10, ja que 챕s 11.
i minus minus.
Anem a imprimir i de nou.
Com era d'esperar, 챕s 10.
>> Aix챠 que ara, al costat.
Es va de nou a la condici처, i 챕s major de 10, per챵 i 챕s ara 10, de manera que
no 챕s m챕s gran que 10, pel que esperem que caigui del bucle while.
I ara estem per sota de la l챠nia de codi.
I un altre ordre, Llista, nom챕s va per mostrar l'anterior i seg체ent
parell de l챠nies de codi, en cas que va perdre a si mateix.
Aix챠 que nom챕s sortia d'aquest bucle while, i ara hem entrat en aquesta
while, l챠nia 18.
Aix챠, mentre que i no 챕s igual a 0.
I, a continuaci처, i 챕s igual a i menys 3, i anem a notar, aix챵 nom챕s seguir횪 endavant.
I podem imprimir i.
>> Cada comandament t챕 una mena de dreceres.
Llavors p 챕s l'abreviatura d'impressi처.
Aix챠 que pot p i.
Hem de tenir la celebraci처 de n, o seguir fent a Seg체ent.
Imprimir i de nou.
Vost챔 veu ara 챕s negatiu 167.
Aix챠 que aix챵 durar횪 per sempre, per챵 no realment per sempre, ja que acaba de veure, 챕s
acabar횪 en realitat en algun moment.
>> Aix챠 que comen챌a GDB.
Per챵 farem una cosa m챕s a GDB.
Uh, de depuraci처.
Aix챠, en aquest cas particular, la bucle infinit va passar a estar dins de
la funci처 principal.
I per ara, nom챕s acceptar que que s처c va a moure el bucle infinit en
la funci처 foo.
Nom챕s recordeu que, al final d'aquest programa, b챕, aix챵 va ser originalment
trucar a foo, que era voleu imprimir i.
Per챵 ara estem cridant foo, que 챕s disminuir횪 i fins que sigui 0, i
a continuaci처, imprimir aquesta variable.
D'acord.
Deseu aix챵.
Fer debug.
I ara, de depuraci처 gdb.
D'acord.
>> Aix챠 que si nom챕s Corro llavors jo no vaig a poder donar un pas en realitat a trav챕s del meu
l챠nia per l챠nia de programa.
Aix챠 que anem a trencar en el principal, i escriviu termini.
Aix챠 de passar per aix챵, printf, introdu챦u un enter, obtenir el nombre enter de 13.
Aix챠 que seguirem decrement fins que i 챕s m챕s gran que 10.
Llavors anem a caure a trav챕s de la while, i arribar a la l챠nia -
obrirem cap amunt en una finestra separada.
Aix챠 que disminueix fins que jo no era m챕s gran que 10, i despr챕s
crida a la funci처, foo.
>> I qu챔 va passar tan aviat com em va colpejar function foo, b챕, em crida foo, i
llavors ja no vaig tenir control sobre GDB.
Aix챠 que tan aviat com em va colpejar a Seg체ent en aquesta l챠nia, coses van continuar fins que va passar aix챵,
on el programa va sortir al -
assumeixi que no existia el temps.
Vost챔 ho va veure fer una pausa per un moment per챵.
Llavors, per qu챔 he perdut el control sobre el programa en aquest moment?
B챕, quan escric a continuaci처, que es destina a la seg체ent l챠nia de codi literal que
s'executar횪.
Aix챠 que despr챕s de la l챠nia 21, la seg체ent l챠nia de codi que s'executar횪 챕s la l챠nia 22,
que 챕s, que surt de principal.
Aix챠 que no em vull anar a la seg체ent l챠nia de codi.
Jo vull entrar en la funci처, foo, i despr챕s tamb챕 pas a pas
aquestes l챠nies de codi.
>> Aix챠 que per aix챵, tenim una alternativa.
Deixem d'aix챵 una altra vegada.
Trencar principal.
Uh, 1, seg체ent, seg체ent, el 13, al costat, seg체ent, seg체ent, amb cura,
abans de tirar-nos a foo l챠nia.
D'acord.
>> Aix챠 que ara, que estem en la l챠nia 21, on anomenem foo.
No volem que escrigui al costat, ja que s'acaba de cridar a la funci처 foo, i
anar a la seg체ent l챠nia de codi.
El que volem utilitzar 챕s el Pas.
Aix챠 que hi ha una difer챔ncia entre el Pas i Next, on el pas entra a la
funcionar, i Next va sobre la funci처.
Simplement executa la totalitat de la funci처 i segueix pujant.
>> Aix챠 que pas ens portar횪 en la funci처, foo.
I veiem aqu챠, ara, estem de tornada a aquest bucle while que 챕s, en teoria,
continuar횪 per sempre.
I si es colpeja Pas, quan ni tan sols 챕s una funci처 per cridar, llavors 챕s
id챔ntica al seg체ent.
Aix챠 que 챕s nom챕s quan vost챔 est횪 en una l챠nia que est횪 cridant a una funci처 que Step
va a diferir de Seg체ent.
Aix챠 Pas ens portar횪 aqu챠.
Pas, pas, pas, pas, pas, pas, i Tindrem bucle infinit per sempre.
>> Aix챠 que 챕s possible acostumar-se a que, com el seu forma d'identificar bucles infinits, 챕s
nom챕s la celebraci처 d'aquesta tecla Enter per veure on et quedes encallat.
Hi ha millors maneres de fer-ho, per챵 per ara, aix챵 챕s perfectament suficient.
I estil챠sticament, per complir amb Estil 50, que hauria d'haver fet aix챵.
D'acord.
>> Aix챠 que una 첬ltima ordre a introduir.
B챕, anem a gdb depuraci처 polz
Aix챠 que en lloc de trencar a principal, si con챔ixer la funci처 foo 챕s tamb챕 el
problema, llavors jo podria tenir nom챕s va dir, trencar a foo, al seu lloc.
Diguem que jo trenco en tant principal i foo.
Aix챠 que vost챔 pot configurar tants punts d'interrupci처 com vulguis.
Quan escric termini, que va per parar al -
ooh, anem a tornar a compilar, ja que He canviat les coses.
Vost챔 veur횪 aquesta l챠nia, Notes, font arxiu 챕s m챕s recent que la executable.
Aix챠 que aix챵 significa que em vaig anar d'aqu챠 i canviat aquests per ajustar-se Estil
50, per챵 no a compilar el programa.
Aix챠 GDB em fa conscient d'aix챵.
Deixar챕, fer debug de nou, colpejar debug gdb.
D'acord.
>> Aix챠 que ara, de tornada al que estava fent.
Trencar principal foo, trencar.
Ara b챕, si executo el programa, pel que 챕s continuar횪 fins que fa un
punt d'interrupci처.
Aquest punt d'interrupci처 passa a ser el primer a principal.
Ara, en comptes de fer les seg체ent, seg체ent, seg체ent, seg체ent, seg체ent, fins que vaig arribar a foo, I
pot escriure continuar, que continuar횪 fins arribar a la seg체ent punt d'interrupci처.
He de introduir el nombre enter primer.
Continuar continuar횪 fins que vaig arribar a la seg체ent punt d'interrupci처, que 챕s que
funci처 de foo.
>> Aix챠 Run s'executar횪 fins arribar a un punt de ruptura, per챵 nom챕s s'escriu d'execuci처 quan
vas a comen챌ar el programa i, a continuaci처, a partir de llavors, 챕s continuar.
Si acabo de fer trencar principal i despr챕s va c처rrer, es trencar횪 en
principal, i despr챕s continuar.
Com jo no tinc un punt d'inflexi처 en foo, introduir el nombre enter, llavors ara estic
no trencar횪 a foo.
Nom챕s va a infinit bucle fins que.
D'acord.
>> Aix챠 que aix챵 챕s Introducci처 a GDB.
Vost챔 ha de comen챌ar a usar-lo en els seus butlletins de problemes.
Pot ser molt 첬til per identificar errors.
Si realment just, l챠nia per l챠nia, vagi a trav챕s del seu codi, i comparar el que 챕s
succeint realment amb el que s'espera a succeir, llavors 챕s bastant
dif챠cil passar per alt els seus errors.
D'acord.
>> Aix챠 que la setmana passada David va fer pujar aquest coses secretes Criptografia de clau per a la
primera vegada, on no volem contrasenyes nom챕s poden emmagatzemar en el nostre
ordinador en algun arxiu de text sense format, on alg첬 pot venir i simplement
obrir-lo i llegir-lo.
L'ideal 챕s que es xifren d'alguna manera.
I en exercicis 2, se'l tracta amb un m챔tode de xifrat,
O, b챕, dos m챔todes, per챵 que no s처n tan grans.
Si ho fa l'edici처 hacker, ets tamb챕 estar횪 tractant amb
desxifrar algunes coses.
>> Aix챠 que la q체esti처 ara 챕s, b챕, encara que tenim el xifrat m챕s potent
algoritme al m처n, si vost챔 escull un particularment pobre contrasenya, llavors
no l'ajudar횪 molt, ja que les persones encara ser횪 capa챌 de entendre-ho.
Encara veient la cadena xifrada i sembla un embolic d'escombraries
que no significa res per a ells, si encara nom챕s ha de provar un parell de contrasenyes
per entendre-ho, llavors vost챔 no s처n molt segures.
Aix챠 que veure un v챠deo que fa que aquest punt.
>> [REPRODUCCI횙 DE V횒DEO]
>> -Casc, vost챔 Dimoni.
Qu챔 est횪 passant?
Qu챔 est횪s fent amb la meva filla?
>> Me-Permeteu-me que introduir el brillant jove cirurgi횪 pl횪stic, el Dr Phillip
Schlotkin, el m챕s gran del nas home de treball a tot el
univers, i Beverly Hills.
>> -La seva Altesa.
>> -Nas treball?
No entenc.
Ella ja ha tingut una cirurgia de nas.
Va ser un dol챌 setze present.
>> -No.
No 챕s el que penses.
횋s molt, molt pitjor.
Si no em dones la combinaci처 de l'escut d'aire, el Dr Schlotkin es
donar a la seva filla de tornada a la seva antiga nas.
>> -No.
D'on vas treure aix챵?
>> -Molt b챕.
T'ho dir챕.
No, pare.
No, no ho has de fer.
>> -Tens ra처, estimada.
Vaig a estranyar la seva nova nas.
Per챵 jo no li vaig a dir la combinaci처, no importa qu챔.
>> -Molt b챕.
Dr Schlotkin, fes el que vulguis.
>> -횋s un plaer.
>> [TOOLS es va aguditzar]
>> -No.
Esperi.
T'ho dir챕.
>> -Jo sabia que anava a funcionar.
Est횪 b챕.
D처na-m'ho.
>> -La combinaci처 챕s un.
>> -Un.
>> -Dos.
>> -Tres.
>> -Quatre.
>> -Cinc.
>> -Aix챠 que la combinaci처 챕s un, dos, tres, quatre, cinc.
Aquesta 챕s la combinaci처 m챕s est첬pida Que he sentit en la meva vida.
Aquest 챕s el tipus de cosa que un idiota tindria en el seu equipatge.
>> -Gr횪cies, Altesa.
>> - Qu챔 vas fer?
>> -Vaig apagar la paret.
>> -No, no ho vas fer.
Va apagar la pel 쨌 l챠cula sencera.
>> -He d'haver premut el bot처 equivocat.
>> -B챕, el va posar de nou.
Col loqueu la pel 쨌 l챠cula de nou.
>> -S챠, senyor.
S챠, senyor.
>> -Anem, Arnold.
Va, Gretchen.
Per descomptat, vost챔 sap que jo seguir챕 haver de cobrar per aix챵.
>> [VIDEO PLAYBACK FI]
>> ROB BODEN: Molt b챕.
Aix챠 que ara que ja estem parlant de seguretat en algunes maneres, agradable
petit cartell de la pel 쨌 l챠cula, pel que en els 첬ltims anys dia, aquests temes amb la NSA
el seguiment de tot.
Pot ser dif챠cil per sentir que tenir algun tipus d'intimitat al
m처n en l챠nia, encara que no podria dir que la major part dels detalls de PRISM.
Aix챠 que anar m챕s enll횪 de PRISM, no anem a parlar d'aix챵, ara
pensar a l'ordinador port횪til.
Aix챠 que aqu챠, vull canviar al meu compte real,
amb el meu petit ping체챠.
Aix챠 que tinc una contrasenya establerta, i que contrasenya 챕s el que jo vull que sigui.
>> Per챵 recordeu que el que estic tala amb, de manera que aquest inici de sessi처
r횪pida, 챕s un programa.
횋s un programa que va ser escrit per alguna persona.
I aix챠, aquesta persona, si s처n particularment malici처s, que van poder
han dit, est횪 b챕, aix챠 que si la contrasenya que entro 챕s igual al meu
contrasenya real, o 챕s igual en certa clau especial -
David 챕s incre챦ble o alguna cosa -
despr챕s deixar-los entrar
Aix챠 que un programador malici처s podria tenir l'acc챕s a totes les seves Macs, o
Finestres, o qualsevol cosa.
>> Aix챠 que no 챕s una gran preocupaci처, ja que, Vull dir, aquest 챕s el programa d'inici de sessi처
aix챵 s'envia amb OS X, centenars o milers de persones tenen
revisat aquest codi.
I aix챠, si, en el codi en algun lloc, vost챔 dir si aquesta cadena 챕s igual als iguals
David 챕s impressionant, inici de sessi처, llavors alg첬 est횪 ser횪, com, esperi.
Aix챵 no est횪 b챕.
Aix챵 no hauria d'estar aqu챠.
Aix챠 que aquesta 챕s una manera de fer les coses a ser una mena d'asseguran챌a.
>> Per챵 pensa en programes fins i tot que escriviu.
Diguem que vost챔 va escriure el programa d'inici de sessi처.
Aix챠 que aquest programa d'inici de sessi처 que vost챔 va escriure, de manera que, 챵bviament, vost챔 챕s un bon
programador.
No vas a posar qualsevol malici처s si x 챕s igual a 챕s igual a David 챕s impressionant
en el codi.
Per챵 aquest programa, el que es fa utilitzar per compilar aquest programa?
Una cosa aix챠 com Clang.
I qu챔 si la persona que li va passar a escriure Clang especial revestit en Clang
una mena, si estic recopilant la programa d'inici de sessi처, introdu챦u el codi
en el programa d'inici de sessi처 que diu, si x 챕s igual a 챕s igual a David 챕s impressionant?
Aix챠 que no 챕s del tot encara, per챵 tenim el mateix emetre aqu챠, on Clang, b챕,
milers, si no desenes de milers de persones, han mirat Clang, tenen
mirat a les seves l챠nies de codi, i va dir: b챕, no passa res aqu챠.
횘bviament, ning첬 est횪 fent una cosa tan mal챔vol.
>> Per챵, qu챔 es Clang si mateix, com, I si va compilar Clang?
Qu챔 passa si tinc algun compilador que compila Clang que s'insereix en Clang
aquest truc especial que diu, est횪 b챕, quan va compilar Clang, llavors el
executable es produeix especialment he mirar dins del programa d'usuari i la inserci처
aquest senyal, 챕s igual als iguals Dave 챕s impressionant?
Aix챠 que recordi que el seu propi compilador necessita ser compilat en algun moment.
Aix챠 que si el que vost챔 tri챦 per compilar Clang amb, s챠 que 챕s nociu, llavors vost챔
podria ser cargolat el conjunt cam챠 per la l챠nia.
>> Aix챠 que aqu챠 tenim a Ken Thompson i Dennis Ritchie.
Aix챠 que aquesta 챕s una foto ic챵nica.
Dennis Ritchie est횪 a la dreta.
Ell 챕s un dels principals -
pr횪cticament va escriure C. Aix챠 que vost챔 pot donar-li les gr횪cies per aquesta classe.
Ken Thomson est횪 a l'esquerra.
Els dos d'ells, b횪sicament, va escriure UNIX.
B챕, eren els principals contribuents en UNIX.
Hi va haver alguns altres.
Aix챠 que Ken Thompson, en algun moment, guanya el Premi Turing.
I el premi Turing, sempre he escoltat es fa refer챔ncia d'aquesta manera, 챕s el
Premi Nobel de la inform횪tica.
>> Aix챠 que en el Premi Turing, que ha de donar el seu discurs d'acceptaci처.
I se li d처na a aquest molt fam처s discurs Ara, anomenat Reflexions sobre Confiant
Trust, que hem vinculat a al lloc web del curs.
I en aquest discurs, es diu, est횪 b챕, aix챠 que vaig escriure UNIX, i ara tots
que la gent est횪 utilitzant UNIX.
Ara, recorda avui que Linux 챕s un descendent directe de UNIX.
OS X utilitza directament UNIX.
Windows no fa molt, per챵 molt d'idees van ser preses de UNIX.
>> Aix챠 que puja a l'escenari i diu, b챕, vaig escriure UNIX.
I perqu챔 el que vost챔s saben, jo s처c podr횪 iniciar sessi처 en cada
i cadascun dels equips.
Des que em vaig posar una d'elles especialment si x 챕s igual a 챕s igual a Ken Thomson 챕s impressionant,
llavors jo estic autoritzat per iniciar sessi처.
Aix챠 que les persones s처n com, b챕, Com vas fer aix챵?
Ens fixem en el programa d'inici de sessi처 i res est횪 all횪.
횋s com, b챕, he modificat el compilador per ingressar en el programa d'inici de sessi처
perqu챔 el programa d'inici de sessi처 tindr횪 ara que x 챕s igual a 챕s igual a Ken Thompson
챕s impressionant.
>> I diuen, b챕, aix챵 no 챕s cert.
Estem pensant en el compilador i el compilador no t챕 l챠nies de
codi d'aquesta manera.
횋s com, OK, per챵 quins s처n vost챔 compilar el compilador?
I pensen, i ell 챕s, com, b챕, Jo s처c el que et va donar el compilador
utilitzeu per compilar el compilador, per est횪 compilant un compilador, que
s챠 que 챕s malici처s, i la voluntat trencar el programa d'inici de sessi처.
Aix챠 que, b횪sicament, en aquell moment, no hi ha de cap manera es pot mirar la font
codi del programa d'inici de sessi처 per veure el que est횪 malament.
Ni tan sols es podia mirar la codi font del compilador
per veure el que est횪 malament.
>> Vost챔 hauria de mirar la m횪quina codi, el binari real de la
compilador compilat per veure, espera, aquests l챠nies de codi no haurien d'estar aqu챠.
Per챵 Ken Thompson va portar un pas m챕s enll횪 i va dir, b챕, hi ha
aquests programes especials que en realitat ajudar횪 a llegir el binari dels programes,
i pel que si alg첬 utilitza aquest programa per llegir el binari, veurien aquests
l챠nies de codi.
Va modificar els programes de dir, tot Est횪 b챕, si vost챔 est횪 buscant en la
compilador, no mostren aquest particular, conjunt de binari.
>> Aix챠 llavors vost챔 necessita per prendre aquest pas m챕s enll횪 i que, b횪sicament, que podria tenir
m첬ltiples nivells d'indirecci처 preses, i en algun moment, ning첬 en realitat
ser횪 la comprovaci처.
Aix챠 que la moralitat de la hist챵ria 챕s, ets No vaig a estar escrivint
Clang en aquesta classe.
Vost챔 va a estar usant l'escalada Clang molt en aquesta classe.
Per a tots vost챔s saben, Clang 챕s un malici처s programa que est횪 sabotejant cada
sol programa alguna vegada has compilat.
I per sortir d'aquest mateix sinistre nota, ens veiem dimecres.
>> [Aplaudiments]
>> ALTAVEU 2: En la seg체ent CS50.
>> ALTAVEU 3: No t'atreveixis a dir aix챵.
Vost챔 pot fer aix챵.
Vost챔 ha fet aix챵 abans, vost챔 pot fer aix챵 avui en dia, vost챔 pot fer aix챵 dem횪.
Has estat fent aix챵 durant anys.
Nom챕s has d'anar-hi i fer-ho.
Vost챔 pot fer aix챵.
>> [REPRODUCCI횙 DE M횣SICA]