Você está na página 1de 151

END OF FILE Ebook C/C++

http://endoffile.umforum.net (raidall: 5762625!


"uthor: hft#$%& ('''.faebook.om/haker.ft#$%&!
(reet): mm*m+ f.ramon+ #u#p$it,-.irtual+ eof member+ entre outro#
/0/,1//,%$ %&/%%//,%$ (#em re.i#2o!
Ola membro# do forum End Of File #e3a bem .indo# ao ebook #obre pro4rama52o /+++ ne##e
ebook irei en#inar #obre pro4rama52o ba#ia da lin4ua4em /++ e tamb6m #obre al4uma# oi#a# de
ni.ei# ba#io# a a.an5ado#+ n2o .amo# no# aprofundar em lo4ia de pro4rama52o embora .amo#
.er um pouo #obre ela para failitar na ria52o do# al4or7timo#+ e##e ebook #era atuali)ado #empre
8ue hou.er oportunidade e #empre na# pa4ina# finai# eu e#tarei li#tando a# altera59e# 8ue foram
feita# para failitar ao# anti4o# leitore#+ n2o 6 permitido a altera52o de##e ebook #em autori)a52o do
autor tamb6m n2o 6 permitido a omeriali)a52o de##e ebook+ porem #era totalmente permitido a
#ua di#tribui52o pela internet ou outro# meio# de forma n2o omerial.
ne##e ebook abordaremo# o# #e4uinte# t:pio# diferen5a entre lin4ua4em de pro4rama52o e
lin4ua4em da m;8uina+ diferen5a entre lin4ua4em ompilada e a lin4ua4em interpretada+
ompila52o por uma IDE ou ompilador+ manu#eio do terminal ou prompt+ diferen5a da# interfae#
CLI e (<I+ e#trutura b;#ia da lin4ua4em /+++ diferen5a de entrada e #a7da de dado#+ bibliotea#
padr9e# da lin4ua4em /+++ .ari;.ei# e on#tante#+ .etore# e matri)e#+ ponteiro# e aloa52o
din=mia+ e#trutura ondiional e la5o#+ direti.a# de pr6>proe##amento+ on.er#2o de dado# e tipo#+
manipula52o de ar8ui.o#+ manipula52o do tempo+ orienta52o a ob3eto da lin4ua4em +++ "?I# do
#i#tema 'indo'# e linu* entre outra# oi#a#.
Indice
%., Introdu52o da lin4ua4em C/C++
%.% Lin4ua4em de pro4rama52o e lin4ua4em da m;8uina
%./ Compiladore# e IDE
%.$ Interfae# CLI e (<I
/., @erminal Aindo'# e Linu*
/.% Be*endo om terminal do 'indo'#
/./ Be*endo om terminal do linu*
$., Cinta*e C/C++
$.% Dibliotea# da lin4ua4em C/C++
$./ Coment;rio#
$.$ Diferen5a da lin4ua4em C e C++
E., Ca7da de dado# (output!
E.% E.itando da 3anela fehar
E./ Formata52o de #trin4
E.$ Fari;.ei# e on#tante#
E.E Fetore# e matri)e#
E.& ?onteiro e aloa52o din=mia e e#t;tia
E.G Entrada de dado# (input!
E.0 Banipula52o de Ctrin4
E.H Banipula52o de ar;ter
&., Lo4ia aritm6tia
&.% Lo4ia booleana
&./ Opera52o bit a bit
&.$ Operadore# de ompara52o e lo4io
&.E E#trutura ondiional
&.& E#trutura de repeti52o
G., Fun52o e reur#i.idade
G.% Direti.a# de pr6>proe##amento
G./ Criando Dibliotea Ieader
G.$ Criando Dibliotea E#t;tia e LID
G.E Criando Dibliotea Din=mia (DLL e CO!
G.& Criando Bakefile
0., E#trutura#
0.% Con.er#2o de tipo e dado#
0./ Banipulando o tempo
0.$ Banipulando ar8ui.o#
0.E Banipulando diret:rio
0.& Banipulando o terminal
H., Orienta52o a ob3eto
H.% Orienta52o a ob3eto: Cla##
H./ Orienta52o a ob3eto: Enap#ulamento
H.$ Orienta52o a ob3eto: Ieran5a
H.E Orienta52o a ob3eto: Con#trutore#
H.& Orienta52o a ob3eto: ?olimorfi#mo
1., "?I Aindo'#
1.% "?I Linu*
1./ "?I Coket (Aindo'# e Linu*!
%,., C(I
%,.% "CB
%%., Fim do ar8ui.o (EOF!
1.0 Introduo da linguagem C/C++
" lin4ua4em de pro4rama52o C 6 uma da# lin4ua4en# mai# anti4a# e mai# u#ada ate ho3e+ #e3a por
pro4ramadore# amadore# a haker#+ 6 uma lin4ua4em muito podero#a e muito f;il ahar
ompiladore# para di.er#a# plataforma# e ar8uitetura#+ e##a lin4ua4em #er.e para u#o 4eral dei# de
um Jhello 'orldK na tela+ uma p;4ina 'eb por C(I+ aender um led ou ate riar um #i#tema de
inteli4Lnia artifiial (por fa.or n2o riem a #kMnet+ 6 #6rio!+ a lin4ua4em C foi riada pelo Denni#
Nithier na d6ada de 0, e foi e#rita na lin4ua4em a##emblM+ em H1 a lin4ua4em te.e uma
padroni)a52o pela "NCI hamada H1 8ue #er.iu para e.itar inompatibilidade entre um
ompilador e outro+ e futuramente #ur4iram no.a# padroni)a59e# adiionando no.a# bibliotea# e
on#tante#+ me#mo om uma padroni)a52o nem todo# o# ompiladore# #e4ue e##e padr2o podendo
4erar inompatibilidade entre ompiladore# 8ue n2o #e4ue e##e padr2o+ uma da# .anta4en# da
lin4ua4em C++ 8ue ela 6 uma lin4ua4em orientada a ob3eto (?OO! diferente da lin4ua4em C 8ue
n2o 6 orientada a ob3eto+ o# :di4o# da lin4ua4em C pode #er ompilado failmente em um
ompilador C++ 3; o# :di4o# da lin4ua4em C++ n2o pode #er ompilado em um ompilador 8ue 6
apena# para lin4ua4em C+ outra .anta4em 8ue #inta*e u#ada na lin4ua4em C/C++ e muito pareida
om outra lin4ua4em mai# reente entre ela# CO+ Pa.a+ ?erl+ ?hp entre outra#+ ent2o 8uando al4u6m
aprende a pro4ramar em C/C++ automatiamente .ai #aber o b;#io de##a# outra# lin4ua4en#+ a
lin4ua4em C/C++ 6 uma lin4ua4em ompilada e e*i#tem ompiladore# para maioria do# #i#tema#
operaionai# embora muita# fun59e# e bibliotea# #: funione em determinado #i#tema ou
plataforma+ outra .anta4em de pro4ramar em C/C++ 8ue ela 6 uma lin4ua4em anti4a ent2o e*i#tem
milhare# de bibliotea# e :di4o# na internet para e#tudo#+ a lin4ua4em C/C++ 8ue #e4ue o padr2o
"NCI 6 a#e>#en#iti.e ou #e3a fa) diferen5a e#re.er maiQ#ulo ou minQ#ulo+ o ompilador .ai ler
o :di4o de ima para bai*o da e#8uerda para direita.
1.1 Linguagem de programao e linguagem da mquina
Buito# lei4o# u#a um pro4rama e mal #abe e*pliar o 8ue 6 e omo funiona um+ um pro4rama ou
um #oft'are 6 uma #e8uenia de :di4o# na lin4ua4em da m;8uina feito para e*eutar tarefa# #obre
um #i#tema operaional+ 8uando bai*amo# um pro4rama na internet bai*amo# na .erdade uma
#e8uenia de :di4o# onheida omo bin;rio (e*eut;.el!+ e##e bin;rio #2o proedimento# 8ue
#i#tema operaional de.e fa)er (riar uma 3anela ou botoe#+ fia e#perando e.ento#+ ler e e*eutar
proe##o et!+ di)emo# 8uando um pro4rama 6 alto n7.el 8uando ele funiona #obre uma amada
aima de uma outra aplia52o omo por e*emplo #i#tema operaional+ e 8uando o pro4rama 6 bai*o
n7.el 8uando ele funiona abai*o de determinada aplia52o (tamb6m 6 omum ou.ir 8ue um
pro4rama de alto n7.el 6 mai# perto do #er humano e um de bai*o n7.el 6 mai# perto da m;8uina!+
ate a4ora de#obrimo# 8ue um pro4rama 6 bin;rio ou um :di4o na lin4ua4em da m;8uina e a
lin4ua4em da m;8uina 6 uma #e8uenia de :di4o# 8ue #i#tema operaional .ai e*eutar+ 3; um
:di4o de lin4ua4em de pro4rama52o 6 uma #e8uenia de :di4o# e#rito pelo pro4ramador 8ue
#er; on.ertido para lin4ua4em da m;8uina e e##a on.er#2o 6 hamada ompila52o+ em uma
ompila52o n2o 6 4erado o e*eut;.el final 6 4erado um ar8ui.o ob3eto e depoi# 6 linkado 4erando
o e*eut;.el final+ nem toda# a# lin4ua4en# de pro4rama52o 6 ompilada al4uma# e*i#te um
e*eut;.el hamado interpretador 8ue ler o :di4o e e*euta e##e proedimento+ a .anta4em da#
lin4ua4en# interpretada# 8ue #e ti.er um interpretador para outra# plataforma# o #ript pode #er
e*eutado #em difiuldade diferente da# lin4ua4en# ompilada# 8ue teria 8ue ompilar de no.o para
4erar o e*eut;.el da8uela plataforma+ e*i#te lin4ua4en# 8ue pode #er ompilada e interpretada ao
me#mo tempo omo por e*emplo o 3a.a me#mo 4erando o e*eut;.el 6 nee##;rio a m;8uina
.irtual para ler o e*eut;.el (a .anta4em do 3a.a 8ue e o e*eut;.el e multiplataforma embora #e3a
e*tramente lento omparado a# outra# lin4ua4en#!
1.2 Compiladores e ID
Como 3; #abemo# o# ompiladore# on.erte o :di4o da lin4ua4em de pro4rama52o para lin4ua4em
da m;8uina+ e*i#tem .;rio# tipo# de ompiladore# para lin4ua4em /++ entre ele# 4+ 4+++
borland +++ turbo +++ entre outro# tipo# de ompiladore#+ al6m do# ompiladore# e*i#tem a# IDE
8ue #2o ambiente de pro4rama52o+ ela# ontem o ompilador e outra# ferramenta# 8ue a3uda o
de#en.ol.edor podendo #er um editor de te*to pr:prio 8ue pode de#taar o# :di4o#+ um debu44er e
hea4em de #inta*e+ ate de#en.ol.imento 4r;fio omo 3anela# e bot9e#+ al4un# e*emplo# de IDE
para lin4ua4em C/C++ #eria o de. +++ ode blok#+ an3uta+ borland ++ builder+ miro#oft .i#ual
#tudio+ elip#e+ netbean#+ al4un# de##e ompiladore# e IDE #2o free'are# outro# #2o omeriai#+
abai*o podemo# .er al4un# #ite# onde pode #er bai*ado al4un# ompiladore# e IDE
http://'''.blood#hed.net/do'nload.html (De. C++!
http://'''.odeblok#.or4/do'nload#/binarie# (Code Dlok#!
http://'''.an3uta.or4/do'nload# ("n3uta!
http://'''.#uperdo'nload#.om.br/do'nload/0//borland>>ompiler/ (Dorland ++!
http://'''.elip#e.or4/do'nload#/ (Elip#e!
http#://netbean#.or4/do'nload#/ (netbean#!
http://'''.miro#oft.om/.i#ual#tudio/ptb/do'nload# (miro#oft .i#ual #tudio!
1.! Inter"aces CLI e #$I
"# interfae# CLI #2o pro4rama# por ba#e omando+ ou #e3a pro4rama# 8ue u#a o terminal+ embora
#e3a raro um u#u;rio final u#ar e##e# tipo# de pro4rama# para um pro4ramador 6 ruial #aber
pro4ramar e u#ar tai# pro4rama#+ o# pro4rama# om interfae CLI 6 muito mai# r;pido e tamb6m
4a#ta meno# mem:ria 8ue pro4rama# om interfae# 4r;fia#+ a 4rande de#.anta4em 8ue u#u;rio
final .ai ter 8ue #aber manipular e##e# pro4rama#+ para o# u#u;rio# finai# 8uanto mai# f;il for o u#o
do pro4rama melhor+ por6m 8uanto mai# f;il o u#o do pro4rama para o u#u;rio final mai#
trabalho#o para o pro4ramador ri;>lo+ abai*o .emo# uma ima4em de um pro4rama om interfae
CLI o pin4 do 'indo'#.
a# interfae# 4r;fia# #2o hamada# interfae (<I+ 6 mai# omum .oL bai*ar um pro4rama 8ue
tenha uma interfae (<I do 8ue CLI+ o# pro4rama# om interfae (<I d; um .i#ual melhor para
pro4rama #e #eu pro4rama .ai #er omerial+ ou #e3a .oL pretende .ender ele 6 reomendo fa)er
ele om interfae (<I para hamar mai# aten52o para o u#u;rio final+ na ria52o de uma interfae
(<I o# pro4ramadore# de.e e#tudar "?I 4r;fia omo por e*emplo (@R+ abai*o temo# uma
ima4em de um pro4rama om interfae (<I.
e*i#tem outro# tipo# de interfae# entre ela# a de .o) F<I 8ue n2o abordarei ne##e ebook.
2.0 %erminal &indo's e Linu(
Suem olha a tela do prompt do 'indo'# pela primeira .e) aaba falando al4o do 4Lnero JBai# 8ue
T.. 6 e##a U>U K+ al4un# nem aredita 8ue i##o era um #i#tema operaional a dua# d6ada# atr;#+ mai#
6 .erdade era um #i#tema operaional ante# me#mo do 'indo'# $* o famo#o e 8ua#e morto
BCDOC+ 6 raro ahar al4u6m 8ue u#e e##e #i#tema ainda embora o u#o do md tamb6m onheido
por prompt ou terminal #e3a ba#tante omum entre pro4ramadore# e haker#+ o 8ue temo# 8ue
entender do terminal 8ue ele funiona a ba#e de omando+ ali podemo# opiar+ mo.er+ deletar+ riar
ar8ui.o+ .er diret:rio+ e*eutar pro4rama+ pratiamente 8ual8uer oi#a 8ue far7amo# no #i#tema
operaional no modo 4r;fio+ o terminal do 'indo' e do linu* #2o um pouo pareido mai# tem #ua
diferen5a no terminal do 'indo'# o# diret:rio# #2o #eparador por ontra barra (V! 3; no linu* por
barra (/!+ no terminal do 'indo'# 6 mo#trado no final o #7mbolo de maior (W! no do linu* 6 a
permi##2o do u#u;rio lo4ado 8ue pode .ariar entre ifr2o e #harp# (X ou O! indiando u#u;rio normal
ou root+ no terminal do 'indo'# ante# do Qltimo #7mbolo india o diret:rio 8ue ele e#t; apontando
no a#o do linu* ante# do diret:rio 8ue ele t; apontando tem uma arroba (-! e o u#u;rio lo4ado e a
m;8uina+ no terminal do 'indo'# o# omando# podem #er #eparador por dua# .e)e# o #imbolo JeK
omerial (YY! 3; no linu* #2o por ponto e .7r4ula (Z!
C:Vu#er#Vft#$%&W
@erminal Aindo'#
ft#$%&-#kMnet /home/ft#$%&X
@erminal Linu*
2.1 )e(endo com terminal do 'indo's
" manipula52o do terminal permite a4ili)ar tarefa# no #i#tema operaional ou #imple#mente
e*eu52o de pro4rama# por omando+ no 'indo'# e*i#te um terminal hamado prompt de omando
e##e terminal pode #er ae##ado apertando no botao JiniiarK do 'indo'#+ depoi# em J@odo# o#
pro4rama#K+ Jae##:rio#K+ Jprompt de omandoK+ ou #imple#mente e#re.er Jmd.e*eK em
Jpe#8ui#ar pro4rama e ar8ui.o#K depoi# apertar enter ai .ai abrir uma tela preta 8ue 6 o terminal
(e##e modo #: funiona no 'indo'# 0!+ .oL tamb6m poderia apertar J'inkeM + rK no de#ktop .ai
abrir uma 3anela hamada e*eutar nela 6 #: di4itar Jmd.e*eK e apertar em JokK+ a ultima forma de
abrir o prompt 6 abrir ele manualmente na pa#ta dele 8ue #eria Jmeu omputadorK+ a unidade 8ue
e#t; in#talado o #i#tema operaional (maioria da# .e)e# na unidade :V!+ diret:rio 'indo'# e depoi#
diret:rio #M#tem$/+ e la dentro tem o e*eut;.el md.e*e (:V'indo'#V#M#tem$/Vmd.e*e!+ om o
prompt aberto podemo# .er 8ue 6 al4o a##im
Biro#oft Aindo'# [.er#2o G.%.0G,,\
CopMri4ht (! /,,1 Biro#oft Corporation. @odo# o# direito# re#er.ado#.
C:V<#er#Vft#$%&W
a primeira parte e#rita JBiro#oft Aindo'# T direito# re#er.adoK podemo# i4norar i##o a Qnia
oi#a importante ali 6 o diret:rio atual JC:V<#er#Vft#$%&WK no a#o o prompt e#ta apontando para o
diret:rio 8ue Jft#$%&K (maioria da# .e)e# o prompt aponta para a pa#ta do u#uario lo4ado!+ e##e
diret:rio Jft#$%&K e#t; dentro do diret:rio J<#er#K e o diret:rio J<#er#K e#ta dentro da unidade
J:VK+ para e*eutar omando# no prompt ba#ta di4itar o omando e apertar enter+ #: 6 po##7.el
e*eutar pro4rama# pelo nome 8ue e#ta dentro do diret:rio atual ou em uma .aria.el de ambiente #e
n2o 6 nee##;rio di4itar o endere5o ompleto+ o primeiro omando 8ue .amo# aprender #er; o
JDINK para e*ibir todo# o# ar8ui.o# e diretorio dentro do diretorio atual
C:V<#er#Vft#$%&W dir
?a#ta de C:V<#er#Vft#$%&
,//%%//,%$ ,&:E& ]DINW .
,//%%//,%$ ,&:E& ]DINW ..
%0/,H//,%$ /$:E& ]DINW Contat#
,H/%%//,%$ ,&:,/ ]DINW De#ktop
,//%%//,%$ ,&:&/ ]DINW Doument#
,H/%%//,%$ ,,:,E ]DINW Do'nload#
%0/,H//,%$ /$:E& ]DINW Fa.orite#
,H/%%//,%$ ,&:/E %E.%&&.00G N@<CEN.D"@
C:V<#er#Vft#$%&W
no a#o ele li#to mai# ar8ui.o# e diret:rio# a8ui por6m eu olo8uei apena# e##e#+ podemo# .er 8ue
ele mo#tra a data e hora 8ue o# pro4rama# foram riado#+ #e o ar8ui.o 6 um diretorio ou n2o a#o
#e3a ele mo#tra ]DINW+ a#o #e3a um ar8ui.o ele mo#tra o tamanho em bit# e por fim o nome do
ar8ui.o ou do diret:rio+ tamb6m podemo# li#tar o diret:rio pelo endere5o
C:V<#er#Vft#$%&W dir :V
?a#ta de :V
%,/,G//,,1 %1:E/ /E autoe*e.bat
/1/,1//,%$ ,%:%& ]DINW Dorland
%,/,G//,,1 %1:E/ %, onfi4.#M#
///,1//,%$ ,G:E% ]DINW M4'in
%H/,H//,%$ ,%:$/ ]DINW De.>Cpp
,0/,1//,%$ ,/:,0 ]DINW Dri.er#
,0/,1//,%$ ,/:,0 ]DINW <#er#
C:V<#er#Vft#$%&W
para entrar em um diret:rio u#amo# o omando CD #e4uido do nome do diret:rio+ no a#o eu e#tou
no diret:rio do u#u;rio la dentro tem um diret:rio hamado De#ktop 8ue 6 nada mai# nada meno#
8ue a ;rea de trabalho da8uele u#u;rio
C:V<#er#Vft#$%&W d De#ktop
C:V<#er#Vft#$%&VDe#ktopW
tamb6m 6 po##i.el ir para determinado diret:rio apena# om endere5o
C:V<#er#Vft#$%&W d :Vu#er#
C:V<#er#W
para .oltar um diretorio podemo# u#ar CD e doi# ponto#
C:V<#er#Vft#$%&VDe#ktopW d ..
C:V<#er#Vft#$%&W
para e*eutar ou abrir um pro4rama ou ar8ui.o ba#ta di4itar nome do pro4rama a#o e#te3a no
me#mo diret:rio 8ue ele
C:V<#er#Vft#$%&VDe#ktopW eof.e*e
tamb6m e po##7.el e*eutar pelo endere5o ompleto a#o n2o e#te3a na me#ma pa#ta
C:V<#er#W C:V<#er#Vft#$%&VDe#ktopVeof.e*e
porem o m6todo aima pode tra.ar e##e terminal en8uanto o pro4rama e#ti.er em e*eu52o para
e.itar i##o podemo# u#ar o omando C@"N@ ante# para u#ar outro prompt para a8uele pro4rama
C:V<#er#Vft#$%&VDe#ktopW #tart eof.e*e
a#o o pro4rama ou diretorio tenha e#pa5o olo8ue entre a#pa# (i##o #er.e para o# outro# omando#
tamb6m!
C:V<#er#Vft#$%&VDe#ktopW #tart ^forum eof.e*e^
para riar um diretorio podemo# u#ar o omando BD #e4uido do nome do diretorio
C:V<#er#Vft#$%&VDe#ktopW md ft#
para remo.er um diretorio podemo# u#ar o omando ND
C:V<#er#Vft#$%&VDe#ktopW rd ft#
para deletar um ar8ui.o podemo# u#ar DEL
C:V<#er#Vft#$%&VDe#ktopW del ft#.e*e
para ler um ar8ui.o u#amo# @_?E
C:V<#er#Vft#$%&VDe#ktopW tMpe ft#.t*t
para opiar um ar8ui.o ou diret:rio podemo# u#ar o omando CO?_ #e4uido do ar8ui.o a #er
opiado e do loal para onde ele .ai
C:V<#er#Vft#$%&VDe#ktopW opM ft#.t*t :V
e*i#tem muito outro# omando# alem do# itado#
2.2 )e(endo com terminal do linu(
" manipula52o do terminal do linu* 6 pareida om a do 'indo'# #: mudando al4un# omando#
alem di##o e*i#te muito mai# omando# para o linu* do 8ue no 'indo'#+ embora e*i#ta o omando
dir no linu* 6 reomendado u#ar o omando l#
ft#$%&-#kMnet:`/De#ktopX l#
am#n.de#ktop ft#.t*t NaidCall.de#ktop
#ript
ft#$%&-#kMnet:`/De#ktopX
podemo# oloar a #inta*e >l para mo#trar a permi##2o+ o dono do ar8ui.o+ 4rupo+ tamanho et
ft#$%&-#kMnet:`/De#ktopX l# >l
lr'*r'*r'* % ft#$%& ft#$%& $G Bai $ /,%$ am#n.de#ktop >W /u#r/#hare/appliation#/
>r'>r>>r>> % ft#$%& ft#$%& /10 Out /E %$:%& ft#.t*t
>r'*r>*r>* % ft#$%& ft#$%& /&1 Bai 1 /,%$ NaidCall.de#ktop
dr'*r>*r>* / ft#$%& ft#$%& 0G, Out %& ,G:/% #ript
ft#$%&-#kMnet:`/De#ktopX
o omando d 6 a me#ma oi#a do 'indo'#
ft#$%&-#kMnet:`/De#ktopX d #ript
ft#$%&-#kMnet:`/De#ktop/#riptX
para .oltar diret:rio om d u#amo# doi# ponto# i4ual o 'indo'#
ft#$%&-#kMnet:`/De#ktop/#riptX d ..
ft#$%&-#kMnet:`/De#ktopX
para riar um diret:rio u#amo# mkdir #e4uido do nome do diretorio
ft#$%&-#kMnet:`/De#ktopX mkdir ft#
para deletar um diretorio u#amo# rmdir #e4uido do nome do diretorio
ft#$%&-#kMnet:`/De#ktopX rmdir ft#
para deletar um ar8ui.o u#amo# rm
ft#$%&-#kMnet:`/De#ktopX rm ft#
para riar um ar8ui.o u#amo# o omando touh
ft#$%&-#kMnet:`/De#ktopX touh ft#.t*t
para opiar determinado ar8ui.o u#amo# o omando p
ft#$%&-#kMnet:`/De#ktopX p ft#.t*t #ript/ft#.t*t
para mo.er determinado ar8ui.o u#amo# o omando m.
ft#$%&-#kMnet:`/De#ktopX m. ft#.t*t #ript/ft#.t*t
para e*eutar determinado pro4rama u#amo# ponto e barra ante#
ft#$%&-#kMnet:`/De#ktopX ./ft#
para ler determinado ar8ui.o podemo# u#ar o at
ft#$%&-#kMnet:`/De#ktopX at ft#.t*t
para fiar om ae##o root u#amo# o omando #u porem e##e omando pode pedir #enha de root+ #e
a #enha e#ti.er erto #era modifiado o #7mbolo X pelo O
ft#$%&-#kMnet:`/De#ktopX #u
Cenha:
root-#kMnet:/home/ft#$%&/De#ktopO
tamb6m podemo# u#ar o #u para mudar de u#uario+ para i##o ba#ta di4itar o u#uario depoi# do #u
ft#$%&-#kMnet:`/De#ktopX #u hak
Cenha:
hak-#kMnet:/home/ft#$%&/De#ktopX
para on#e4uir ae##o root tempor;rio para determinado omando podemo# u#ar o #udo #e4uido do
omando
ft#$%&-#kMnet:`/De#ktopX #udo rd ft#.t*t
podemo# mudar a permi##2o om o omando hmod #e4uido da #inta*e > e o odi4o da permi##2o
e por fim o ar8ui.o (n2o en#inarei #obre permi##2o me#mo por8ue i##o 6 um ebook de C/C++ e n2o
de linu*!+ no e*emplo abai*o eu oloo a permi##2o r'*r>*r>* para o ar8ui.o ft#.t*t
ft#$%&-#kMnet:`/De#ktopX hmod > 0&& ft#.t*t
para montar uma unidade ou parti52o podemo# u#ar o omando mount #e4uido da unidade depoi#
uma pa#ta onde #era montado (dependendo do a#o 6 nee##ario e#tar omo root!
ft#$%&-#kMnet:`/De#ktopX mount /de./#db% /home/ft#$%&/De#ktop/hd/
para de#montar u#amo# o umount
ft#$%&-#kMnet:`/De#ktopX umount /home/ft#$%&/De#ktop/hd/
!.0 *inta(e C/C++
@odo pro4rama em C e*i#te uma fun52o prinipal e na maioria da# .e)e# 6 a fun52o 6 a main+ ne##a
fun52o .amo# ter 8ue definir um tipo de retorno e um ar4umento #: 8ue ante# de tudo riamo# um
ar8ui.o de te*to om e*ten#2o . e o# pro4rama# C++ u#a e*ten#2o .pp+ e##e ar8ui.o n2o pode ter
formata52o de te*to ent2o ele de.e #er riado om um editor de te*to puro tipo o notepad do
'indo' ou k'rite do linu* ou pela# IDE+ o tipo de retorno .em ante# do nome da fun52o no a#o
e##a fun52o prinipal nee##ita retornar um tipo inteiro ent2o u#amo# int #e4uido do nome main+
u#amo# parLnte#e# para definir o ar4umento 8ue #er; .oid (tipo .a)io!+ por fim u#amo# ha.e# para
riar o bloo tamb6m hamado de e#opo
int main(.oid!ab
a lin4ua4em C/C++ n2o diferenia e#pa5o e nem 8uebra de linha# o e*emplo anterior e o pr:*imo
#eria a me#ma oi#a para ompilador
int main ( .oid !
a
b
#empre de uma 8uebra de linha a ada final de uma fun52o e #empre de um e#pa5o a ada no.o
e#opo i##o dei*a o :di4o mai# or4ani)ado e le47.el i##o #e hama edenta52o ou reuo+ ate a4ora
riamo# a fun52o main definimo# o ar4umento e o tipo de retorno mai# n2o definimo# o retorno+
para i##o u#amo# a pala.ra return #e4uido do .alor de retorno 8ue #er; ,+ e para terminar u#amo#
ponto e .7r4ula indiando fim do omando+ e##e ponto e .7r4ula 6 nee##;rio #em ele o ompilador
.ai ahar 8ue o pr:*imo omando fa) parte de##e e .ai d; erro na hora de ompilar
int main(.oid!
a
return ,Z
b
8uando o ompilador ahar o return ele automatiamente .ai terminar a fun52o me#mo #e ti.er
outra# oi#a# em bai*o+ para ompilar a#o .oL e#te3a u#ando uma IDE proure o botao ou menu
(no a#o o de. ++ .oL pode apertar F1!+ a#o .oL 8ueira ompilar pelo terminal loali)e o
ar8ui.o e di4ite 4 #e4uido da #oure no a#o .ou ompilar #inta*e,$.+ depoi# u#amo# o omando
>o #e4uido do nome do e*eut;.el 8ue #er; 4erado (a#o de um erro de um erro de n2o reonheido
omo omando interno ou e*terno po##i.elmente #eu ompilador n2o e#t; na# .ari;.ei# de ambiente
ou .oL e#t; u#ando outro tipo de ompilador+ outra oi#a para ompilar pro4rama# ++ pelo
terminal u#amo# 4++ no lu4ar de 4!
C:Vu#er#Vft#$%&Vde#ktopW 4 #inta*e,$. >o e*emplo.e*e
depoi# de 4erar o e*eut;.el ba#ta abrir ele+ .oL de.e ter notado 8ue ele feho i##o por8ue ele n2o
fa) nada 6 um pro4rama inQtil kkkk.
!.1 +i,liotecas da linguagem C/C++
<ma da# .anta4en# da pro4rama52o 8ue .oL n2o prei#a riar tudo 3; e*i#tem bibliotea# de
fun59e# pronta# 8ue 6 #: delarar e u#ar+ na lin4ua4em C/C++ para delarar uma bibliotea header
u#amo# a direti.a Oinlude #e4uido da bibliotea entre o #7mbolo menor e maior+ boa parte da#
.e)e# delaramo# uma bibliotea no ome5o da #oure entre a# primeira# linha#+ e*i#tem di.er#a#
bibliotea# padr9e# 8ue #er.em para di.er#o# proedimento# entre ele# mo#trar al4o na tela
manipular e.ento# do #i#tema operaional+ manipular te*to+ manipular o tempo+ entre outra# oi#a#+
a# bibliotea# mai# u#ada# na lin4ua4em C #2o J#tdio.hK para manipular fun59e# de entrada e #a7da
de dado#+ J#tdlib.hK tem di.er#a# fun59e# do #i#tema+ J#trin4.hK para manipular te*to#+ JtMpe.hK
para manipular aratere#+ time.h para manipular o tempo+ #tdbool.h para manipular l:4ia
booleana+ J'indo'#.hK para manipula52o de "?I no #i#tema operaional 'indo'#+ Juni#td.hK para
manipula52o de determinada# "?I do #i#tema linu*/uni*+ J'in#ok/.hK para manipula52o de rede
do #i#tema 'indo'#+ J#M#/#oket.hK para manipula52o de rede do #i#tema linu*+ Jdirent.hK para
manipula52o do# diret:rio# do #i#tema 'indo'#+ J#M#/dir.hK para manipula52o do# diret:rio# do
#i#tema linu*+ J#M#/tMpe#.hK para manipula52o de al4un# tipo# de dado# no #i#tema linu*+ na
lin4ua4em C++ 6 po##7.el u#ar e##a# bibliotea# por6m e*i#tem bibliotea# 8ue #: funiona na
lin4ua4em C++ omo por e*emplo a Jio#treamK 8ue #eria uma melhoria da #tdio.h para lin4ua4em
C++
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
return ,Z
b
e##a# bibliotea# na maioria da# .e)e# e#t; em um diret:rio do ompilador mai# 6 po##7.el oloar
ela# no me#mo diret:rio da #oure por6m teria 8ue oloar entre a#pa# dupla# em .e) de menor e
maior na hora de delarar
Oinlude ]#tdio.hW
Oinlude ^eof.h^
int main(.oid!
a
return ,Z
b
e*i#tem outro# tipo# bibliotea# al6m da# header um e*emplo #2o a# DLL+ 8uando uma bibliotea 6
ompilada 3unto 4erando o e*eut;.el hamamo# ela de bibliotea e#t;tia+ e 8uando ela 6 hamada
em tempo de e*eu52o (run>time! hamamo# de bibliotea din=mia+ tamb6m #eria po##7.el riar
#ua# pr:pria# bibliotea# para reapro.eitar parte do :di4o+ mai# para frente .amo# .er melhor i##o
!.2 Comentrios
c #empre bom omentar o #eu :di4o para failitar na leitura+ o# oment;rio# tamb6m #2o u#ado na#
primeira# linha# para de#re.er o :di4o ou informa52o omo o autor ou de#ri52o do odi4o+
8uando o ompilador aha um oment;rio ele i4nora a8uele parte do :di4o+ um oment;rio
tambem pode #er.ir para e*luir temporariamente um treho do :di4o a##im permitindo .oL
debu4ar+ para omentar u#amo# dua# .e)e# a barra (//! para omentar a linha toda+ o 8ue e#ti.er
depoi# .ai #er o oment;rio
//forum: end of file
Oinlude ]#tdio.hW //i##o 6 uma bibliotea
//fun52o prinipal
int main(.oid!
a
// return ,Z e##e return foi e*luido
b
al6m de##e oment;rio de uma linha podemo# omentar .;ria# linha# om barra a#teri#o e para
finali)ar a#teri#o barra (/d e d/!+ e##e tipo de oment;rio pode #er u#ado dentro do# :di4o# #em
afet;>lo#
/d
forum: end of file
ebook: /++
d/
Oinlude ]#tdio.hW
int main(/d i##o 6 um tipo .a)io d/ .oid !
a
return /d .ai retornar o numero , d/ ,Z
b
al4uma# IDE permite oment;rio de de#ta8ue+ e##e# tipo# de oment;rio# #2o pareido om o#
oment;rio# de .;ria# linha# por6m tem um a#teri#o a mai# (/dd e dd/!+ al4uma# IDE permite
de#taar al4un# par;4rafo# dentro de##e tipo de oment;rio u#ando al4uma# repre#enta59e# omo
por e*emplo o -"uthor: para de#taar o autor do :di4o
/dd
-"uthor: end of file
dd/
Oinlude ]#tdio.hW
int main(.oid!
a
return ,Z
b
!.! Di"erena da linguagem C e C++
" #inta*e da lin4ua4em C/C++ #2o i4uai# a diferen5a 8ue a lin4ua4em C++ tem oi#a# no.a# omo
orienta52o a ob3eto+ pa##a4em de ar4umento de la##e# para a# fun59e#+ aloa52o din=mia de
mem:ria pelo operador ne' e libera52o da mem:ria pelo operador delete+ uma# e#trutura# no.a#
omo name#pae e la##+ a# on#tante# true e fal#e n2o prei#ar da bibliotea #tdbool.h+ al4un# tipo#
de dado# no.o# omo #trin4+ tamb6m 6 omum u#ar e*ten#2o J.K para lin4ua4em C e J.ppK para
lin4ua4em C++
-.0 *a.da de dados /output0
Suando di)emo# entrada (input! ou #aida (output! e#tamo# en.iando ou reebendo dado# de um
ponto " para o ponto D+ no a#o temo# 8ue definir o maro )ero 8ue na maioria da# .e)e# 6 pr:prio
pro4rama+ ou #e3a uma #a7da de dado# poderia #er al4o 8ue #ai do pro4rama para o monitor+ ou do
pro4rama para impre##ora+ ou do pro4rama para o ID ou mem:ria+ 3; a entrada de dado# 6 o opo#to
#eria para dentro do pro4rama podendo #er al4o 8ue e#re.emo# no telado+ mo.imento do mou#e+
ou al4uma oi#a do ID+ e##e termo input e output tamb6m 6 u#ado em outra# ;rea# omo por
e*emplo manuten52o #e .oL per4untar para t6nio para ele definir o8ue 6 um telado e um
monitor ele ertamente .ai di)er 8ue o monitor 6 um perif6rio de #a7da e o telado um perif6rio de
entrada+ o termo u#ado para o# dado# en.iado ou reebido #2o hamado de flu*o+ #tream ou buffer+ e
o# te*to# na pro4rama52o #e hama #trin4+ uma #trin4 6 um on3unto de aratere# 8ue #eria o
me#mo 8ue di)er 8ue uma pala.ra 6 um on3unto de letra#+ toda #trin4 de.e fiar entre a#pa# para o
ompilador n2o onfundir ela om uma .ari;.el+ a #a7da de dado# mai# u#ada #er; para o monitor
um e*emplo de fun52o 8ue mo#tra al4o na tela 6 o printf e put# da bibliotea #tdio.h+ na lin4ua4em
++ podemo# u#ar o out da bibliotea io#tream+ para u#ar o printf ou put# temo# 8ue delarar a
bibliotea #tdio.h+ depoi# dentro do e#opo da fun52o prinipal u#amo# a fun52o e pa##amo# omo
ar4umento a no##a #trin4 8ue #er; mo#trada na tela e por fim u#amo# ponto e .7r4ula para finali)ar
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^u#ando o printf^!Z
return ,Z
b
o u#o da fun52o put# 6 a me#ma oi#a# 8ue o printf
Oinlude ]#tdio.hW
int main(.oid!
a
put#(^u#ando o put#^!Z
return ,Z
b
tamb6m poder7amo# u#ar .;ria# .e)e# o printf ou put#+ ou o# doi# 3unto#
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^u#ando o printf^!Z
printf(^u#ando a #e4unda .e) o printf eD^!Z
put#(^u#ando o put#^!
return ,Z
b
a diferen5a entre o put# e o printf+ 8ue o put# mo#tra apena# #trin4 3; o printf permite formatar a
#a7da para mo#tra nQmero# e outro# tipo# de dado#+ para #aida de dado# para monitor de um Qnio
ar;ter podemo# u#ar puthar da bibliotea #tdio.h
Oinlude ]#tdio.hW
int main(.oid!
a
puthar(UfU!Z
puthar(UtU!Z
puthar(U#U!Z
return ,Z
b
para u#ar o out da lin4ua4em ++ temo# 8ue oloar um name#pae #td ante# da fun52o fiando
#td::out e u#ar dua# .e)e# o menor #e4uido da #trin4
Oinlude ]io#treamW
int main(.oid!
a
#td::out ]] ^u#ando o out^Z
return ,Z
b
tamb6m #eria po##7.el u#ar o printf ou put# na lin4ua4em C+++ por6m 6 reomendado o u#o da
bibliotea #tdio no lu4ar de #tdio.h
Oinlude ]#tdioW
int main(.oid!
a
printf(^#tdio e i4ual a #tdio.h^!Z
put#(^porem #tdio nao funiona na lin4ua4em C #o em C++^!Z
return ,Z
b
-.1 1itando da 2anela "ec3ar
Ce .oL u#a 'indo'# de.e ter perebido 8ue o pro4rama e*euto e depoi# feho automatiamente
para e.itar i##o temo# 8ue pau#ar o terminal+ para i##o e*i#tem .;ria# fun59e# uma dela# 6 o 4eth
da bibliotea onio.h+ e##a 6 uma da# fun59e# de entrada de dado# do telado+ para u#ar ba#ta
delarar #em nenhum ar4umento a##im
Oinlude ]#tdio.hW
Oinlude ]onio.hW
int main(.oid!
a
printf(^8uero .er #e .oe feha a4ora 3anelafff^!Z
4eth(!Z
return ,Z
b
outra fun52o 6 o #M#tem da bibliotea #tdlib.h+ para u#ar ba#ta pa##ar omo ar4umento a #trin4
Jpau#eK
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
printf(^hello 'orldfff^!Z
#M#tem(^pau#e^!Z
return ,Z
b
-.2 4ormatao de string
Suando u#amo# dua# .e)e# o printf ele mo#tra# a# dua# #trin4# na me#ma linha+ para mo#trar em
linha# diferente# temo# 8ue u#ar um :di4o de e#ape 8ue repre#ente a 8uebra de linha+ o# :di4o#
de e#ape# ome5a om ontra barra #e4uida de um ar;ter+ para a 8uebra de linha u#amo# ontra
barra mai# o ar;ter JnK (Vn!
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^VnVn^!Z
printf(^era uma .e) uma 4ato om 0 .ida#Vn^!Z
printf(^pa##o um arro E*E por ima dele+Vn e ele morreu FIBfffVnVn^!Z
return ,Z
b
para repre#entamo# a#pa# u#amo# ontra barra mai# o a#pa# (VK!+
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^fato > todo# 8ue fa)em #oft'are fa) V^pro4ramaV^ Vnmai# nem todo# 8ue
fa)em V^pro4ramaV^ fa) #oft'are^!Z
return ,Z
b
para tabula52o u#amo# ontra barra mai# o ar;ter JtK (Vt!+ um bom u#o para i##o 6 riar banner
para #eu pro4rama
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^ggggggggggggggggggggggVn^!Z
printf(^Vt EOFVn^!Z
printf(^ggggggggggggggggggggggVnVn^!Z
return ,Z
b
para emitir um #om (beep! u#amo# ontra barra mai# o ar;ter JaK (Va!+ e##e #om #era emitido da
plaa mae e n2o da ai*a de #om
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^Va pro4rama li4ado^!Z
printf(^VaVa pro4rama de#li4ado^!Z
return ,Z
b
para repre#entar o #7mbolo de porenta4em u#amo# dua# .e)e# porenta4em (hh!
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^ho3e eu e#tou %,,hh bebado ()ueira to nao!^!Z
return ,Z
b
tamb6m e*i#te outro tipo de :di4o de e#ape para atribui52o de .ari;.ei# na #trin4+ e##e :di4o de
e#ape 6 o #7mbolo de porenta4em #e4uido do ar;ter 8ue repre#enta o tipo de dado# 8ue #er;
mo#trado+ hd ou hi tipo inteiro+ hf tipo float+ hlf tipo double+ h tipo har+ h# tipo #trin4+ he ou
hE repre#enta52o do nQmero em forma e*poente+ h* ou he repre#enta52o do nQmero em forma
he*adeimal+ hp endere5o de mem:ria+ ho repre#enta52o do nQmero em forma otal+ al6m de##e#
e*i#tem outro# :di4o# de e#ape.
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^deimal: hd Vn^+$%&!Z
printf(^he*adeimal: h* Vn^+$%&!Z
printf(^otal: ho Vn^+$%&!Z
printf(^float: hf^+$.%&!Z
return ,Z
b
-.! 5ari1eis e constantes
<ma .ari;.el 6 uma aloa52o de mem:ria 8ue permite um arma)enamento de dado# na mem:ria do
omputador+ o# dado# arma)enado ne##a# .ari;.ei# podem #er modifiado ao deorrer do pro4rama+
a# .ari;.ei# pode ter 8ual8uer nome ontando 8ue #e3a nome# 8ue omee om letra# de JaK ate J)K
ou underline+ #em e#pa5o e podendo #er maiQ#ula# ou minQ#ula#+ por6m por padr2o 6
reomendado oloar toda# a# .ari;.ei# minQ#ula# e a# on#tante# em maiQ#ula# para aumentar a
le4ibilidade+ podemo# riar uma .ari;.el em $ lu4are# diferente #endo ele# dentro do e#opo de uma
fun52o riada e##a# #2o a# .ari;.ei# loai# omo por e*emplo dentro da fun52o prinipal (main!+ no
ar4umento de uma fun52o riada omo por e*emplo onde #eria o .oid da fun52o main+ ou no lado
de fora para a# fun59e# 4lobai# um e*emplo depoi# do# inlude#+ a# .ari;.ei# #: podem #er
ae##ada# pelo# :di4o# abai*o dela# em termo l:4io .oL #: pode ae##ar uma .ari;.el depoi# de
riar ela+ a# .ari;.ei# loai# #: pode #er ae##ada# dentro do e#opo onde foram riada# e a#
.ari;.ei# 4lobai# pode #er ae##ada em 8ual8uer e#opo+ para riar uma .ari;.el ba#ta oloar o tipo
de dado #e4uida do nome da .ari;.el+ abai*o .emo# um e*emplo de $ .ari;.ei# de tipo int
Oinlude ]#tdio.hW
int .ari4lobalZ
int main(int .ariar4umento!
a
int .ariloalZ
return ,Z
b
o# tipo# padr9e# da lin4ua4em C/C++ #2o .ari;.ei# de tipo int 8ue permite arma)enar nQmero#
inteiro#+ nQmero# 8uebrado# #2o a# .ari;.ei# tipo float+ nQmero# 8uebrado# 4rande# #2o .ari;.ei#
tipo double+ .ari;.ei# tipo ar;ter #2o a# har+ a# #trin4# na .erdade #2o arraM do tipo har .amo#
aprender omo arma)enar ela# mai# para frente em .etore# e matri)e# a lin4ua4em ++ e*i#te o tipo
#trin4 embora al4uma# fun59e# o#tuma da erro om ele
Oinlude ]#tdio.hW
int main(.oid!
a
int inteiroZ
float 8uebradoZ
double 8uebradoi4i4anteZ
har araterZ
return ,Z
b
para atribuirmo# o# dado# para a# .ari;.ei# oloamo# o nome da .ari;.el o #7mbolo de i4ual e o
dado 8ue .ai #er arma)enado
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffileZ
float ft#Z
endoffile g $%&Z
ft# g $.%&Z
return ,Z
b
podemo# u#ar o printf para e*ibir a .ari;.el oloando um .7r4ula depoi# da #trin4 e depoi# a
.ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffileZ
float ft#Z
endoffile g $%&Z
ft# g $.%&Z
printf(^inteiro g hd Vn^+endoffile!Z
printf(^float g hf^+ft#!ZZ
return ,Z
b
tambem poderia fa)er a##im
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffileZ
float ft#Z
endoffile g $%&Z
ft# g $.%&Z
printf(^inteiro g hd Vnfloat g hf^+endoffile+ft#!Z
return ,Z
b
uma .ari;.el pode mudar o .alor ao deorrer do pro4rama ba#tando atribuir o no.o .alor para ela
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffileZ
endoffile g $%&Z
printf(^.alor g hd^+endoffile!Z
endoffile g %,,Z
printf(^.alor g hd^+endoffile!Z
return ,Z
b
tamb6m e po##7.el arma)enar em uma .ari;.el o .alor de outra .ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffileZ
int ft#Z
ft# g $%&Z
endoffile g ft#Z
printf(^.alor g hd^+ft#!Z
return ,Z
b
6 po##7.el iniiar um .alor 3unto om .ari;.el+ para i##o ba#ta atribuir o .alor a##im 8ue delarar ela
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffile g $%&Z
printf(^hd^+endoffile!Z
return ,Z
b
8uando tem mai# de uma .ari;.el do me#mo tipo podemo# riar ela# 3unta# #eparando por .7r4ula
Oinlude ]#tdio.hW
int main(.oid!
a
int endoffile g $%&+ ft#Z
return ,Z
b
uma .ari;.el do tipo har de.e arma)enar ar;ter entre a#pa# #imple#+ a a#pa# dupla india #trin4 e
uma #trin4 de.e #er arma)enada dentro de uma arraM do tipo har
Oinlude ]#tdio.hW
int main(.oid!
a
har letra% g UeUZ
har letra/ g UoUZ
har letra$ g UfUZ
printf(^arater g hhh^+letra%+letra/+letra$!Z
return ,Z
b
3; na lin4ua4em C++ e*i#te o tipo #trin4 8ue arma)ena #trin4#
Oinlude ]io#treamW
int main(.oid!
a
#td::#trin4 eofZ
eof g ^i##o ai^Z
#td::out ]] eofZ
return ,Z
b
uma on#tante 6 uma aloa52o de mem:ria 8ue n2o muda o .alor ao deorrer do pro4rama+ para
riar uma on#tante riamo# uma .ari;.el e adiionamo# a pala.ra on#t ante# do tipo+ por6m
tamb6m 6 nee##;rio atribuir o .alor 3unto
Oinlude ]#tdio.hW
int main(.oid!
a
on#t float ?I g $.%E%&1/Z
printf(^o .alor de ?I e i4ual a hf^+?I!Z
return ,Z
b
outra forma de riar on#tate# 6 u#ar a direti.a Odefine+ e##a direti.a #ub#titui toda parte pelo :di4o
orre#pondente+ para u#ar e##a direti.a ba#ta delarar Odefine oloar um nome e o .alor+ 8uando o
opilador ahar a defini52o do define ele automatiamente .ai mudar o odi4o pelo .alor do define
Oinlude ]#tdio.hW
Odefine ?I $.%E%&1/
int main(.oid!
a
printf(^o .alor de ?I e i4ual a hf^+?I!Z
return ,Z
b
o :di4o anterior #eria e8ui.alente a e##e
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^hf^+$.%E%&1/!Z
return ,Z
b
mai# para frente .amo# .er outro# e*emplo# de omo u#ar a direti.a define para on#truir parte do
:di4o
-.- 5etores e matri6es
na ria52o de muita# .ari;.ei# para o me#mo prop:#ito 6 reomendado riar uma arraM+ uma arraM 6
uma .ari;.el omo muito# #e4mento#+ e*i#te doi# tipo# de arraM o# .etore# e a# matri)e#+ o# .etore#
permite apena# um #e4uimento+ 3; a# matri)e# ada #e4mento 6 um no.o #e4mento 8ue pode ter
no.o# #e4mento#+ para e*pliar melhor ima4ine 8ue .oL tenha 8ue riar / .ari;.ei# para definir
altura e lar4ura+ no lu4ar de##a# dua# .ari;.ei# podemo# ria % arraM om doi# e#pa5o#+ para riar
uma arraM 6 a me#ma oi#a 8ue riar uma .ari;.el ba#ta oloar o tipo um nome+ a diferen5a 8ue
temo# 8ue abrir e fehar olhete# e dentro dele oloar o tamanho no a#o do e*emplo .ai #er /
Oinlude ]#tdio.hW
int main(.oid!
a
int tamanho[/\Z
return ,Z
b
no e*emplo aima u#amo# um .etor om / tamanho#+ para arma)enar o .alor nele ba#ta atribuir o
.alor na .ari;.el mudando o nQmero do olhete (inde*! 8ue ome5a no om o nQmero ,
Oinlude ]#tdio.hW
int main(.oid!
a
int tamanho[/\Z
tamanho[,\ g $,,Z
tamanho[%\ g %&Z
printf(^hd Vn^+tamanho[,\!Z
printf(^hd^+tamanho[%\!Z
return ,Z
b
para iniiar o# .alore# om a arraM u#amo# ha.e# e #eparamo# o .alor om .7r4ula
Oinlude ]#tdio.hW
int main(.oid!
a
int tamanho[/\ g a$,,+%&bZ
printf(^hd Vn^+tamanho[,\!Z
printf(^hd^+tamanho[%\!Z
return ,Z
b
tamb6m 6 po##7.el n2o definir o tamanho+ por6m #: funiona para a# arraM om .alore# iniiado#+
de##a maneira a arraM .ai ter e*atamente o tamanho i4ual a 8uantidade de .alore#
Oinlude ]#tdio.hW
int main(.oid!
a
int tamanho[\ g a$,,+%&bZ
printf(^hdVnhd^+tamanho[,\+tamanho[%\!Z
return ,Z
b
podemo# riar #trin4# de##a maneira+ uma #trin4 de.e ter o tamanho maior para adiionar o odi4o
de e#ape UV,U no final
Oinlude ]#tdio.hW
int main(.oid!
a
har forum[E\ g aUeU+UoU+UfUbZ
printf(^h#^+forum!Z
return ,Z
b
#e atribu7rmo# o# ar;tere# manualmente temo# 8ue adiionar o :di4o de e#ape nulo
manualmente tamb6m
Oinlude ]#tdio.hW
int main(.oid!
a
har forum[E\Z
forum[,\ g UeUZ
forum[%\ g UoUZ
forum[/\ g UfUZ
forum[$\ g UV,UZ
printf(^h#^+forum!Z
return ,Z
b
o odi4o de e#ape nulo 6 e8ui.alente ao odi4o he*adeimal ,*,,
Oinlude ]#tdio.hW
int main(.oid!
a
har forum[E\Z
forum[,\ g UeUZ
forum[%\ g UoUZ
forum[/\ g UfUZ
forum[$\ g ,*,,Z
printf(^h#^+forum!Z
return ,Z
b
uma forma mai# #imple# de atribuir uma #trin4 a uma arraM 6 iniiar ela 3unto+ n2o tem omo
atribuir uma #trin4 para uma arraM #em #er ar;ter por ar;ter
Oinlude ]#tdio.hW
int main(.oid!
a
har forum[E\ g ^eof^Z
printf(^h#^+forum!Z
return ,Z
b
tamb6m podemo# ler o# ar;tere# de uma arraM
Oinlude ]#tdio.hW
int main(.oid!
a
har forum[E\ g ^eof^Z
printf(^h h^+forum[,\+forum[/\!Z
return ,Z
b
a# matri)e# tamb6m hamada# arraM multidimen#ional arma)ena outro #e4mento ao in.6# do#
.alore#+ a .anta4em 8ue permite arma)enar uma e#p6ie de arraM dentro da outra+ para riar uma
matri) ba#ta u#ar outro# olhete#
Oinlude ]#tdio.hW
int main(.oid!
a
int matri)[/\[$\Z
return ,Z
b
para atribuirmo# ba#ta atribuir ao Qltimo olhete
Oinlude ]#tdio.hW
int main(.oid!
a
int matri)[/\[$\Z
matri)[,\[,\ g $%&Z
matri)[,\[%\ g &,Z
matri)[,\[/\ g $,Z
matri)[%\[,\ g 1,,Z
matri)[%\[%\ g G$,Z
matri)[%\[/\ g &&&Z
return ,Z
b
para iniiar o# .alore# na arraM oloamo# outra# ha.e# dentro orre#pondente a 8uantidade de
#e4mento#
Oinlude ]#tdio.hW
int main(.oid!
a
int matri)[/\[$\ g aa$%&+&,+$,b+a1,,+G$,+&&&bbZ
return ,Z
b
podemo# riar 8uanta# inde* a 4ente 8ui#er
Oinlude ]#tdio.hW
int main(.oid!
a
int matri)[%,\[%,\[%,\[%,\ g aaaa$%&+%,,bbbbZ
printf(^hd Vn^+matri)[,\[,\[,\[,\!Z
printf(^hd^+matri)[,\[,\[,\[%\!Z
return ,Z
b
-.7 8onteiro e alocao din9mica e estticas
toda# a# .ari;.ei# e*i#te um endere5o de mem:ria onde ela# e#t2o arma)enada#+ o# ponteiro#
permite ae##ar e manipular e##e# endere5o#+ a .anta4em de um ponteiro 8ue .oL pode manipular
.ari;.ei# loai# fora do #eu e#opo+ para riar um ponteiro ba#ta riar uma .ari;.el e oloar
a#teri#o ante# do nome
Oinlude ]#tdio.hW
int main(.oid!
a
int dponteiroZ
return ,Z
b
om ponteiro riado ba#ta atribuir o endere5o de mem:ria de um .ari;.el a ele+ para i##o atribu7mo#
o endere5o da .ari;.el oloando o #7mbolo Y #e4uida do nome da .ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
int .aria.el g $%&Z
int dponteiroZ
ponteiro g Y.aria.elZ
return ,Z
b
para e*ibir o .alor onde e#ta apontando ba#ta oloar um a#teri#o ante# do nome do ponteiro+ para
e*ibir apena# o endere5o ba#ta oloar #em a#teri#o
Oinlude ]#tdio.hW
int main(.oid!
a
int .aria.el g $%&Z
int dponteiroZ
ponteiro g Y.aria.elZ
printf(^.alor: hd Vn^+dponteiro!Z
printf(^endereo: hd^+ponteiro!Z
return ,Z
b
para mudar o .alor onde ele t; apontando ba#ta oloar a#teri#o (no a#o o a#teri#o .ai ae##ar a
.ari;.el e #em ele .ai ae##ar o ponteiro!
Oinlude ]#tdio.hW
int main(.oid!
a
int .aria.el g $%&Z
int dponteiroZ
ponteiro g Y.aria.elZ
dponteiro g %,,Z
printf(^hd^+.aria.el!Z
return ,Z
b
tamb6m podemo# riar ponteiro para ponteiro+ para i##o ba#ta oloar um no.o a#teri#o a ada
no.o ponteiro e atribuir o endere5o de mem:ria do# outro# ponteiro#
Oinlude ]#tdio.hW
int main(.oid!
a
int .aria.el g $%&Z
int dponteiro%+ ddponteiro/+ dddponteiro$Z
ponteiro% g Y.aria.elZ
ponteiro/ g Yponteiro%Z
ponteiro$ g Yponteiro/Z
printf(^hd^+dddponteiro$!Z
return ,Z
b
a# .e)e# 6 nee##;rio aloar um e#pa5o na mem:ria e depoi# liber;>la manualmente e##e tipo de
aloa52o 6 hamado aloa52o din=mia de mem:ria+ diferente da# .ari;.ei# loai# 8ue o e#pa5o 6
liberado apena# 8uando a fun52o for de#tru7da e da# .ari;.ei# 4lobai# 8ue #: 6 liberado 8uando o
pro4rama for finali)ado a# din=mia# pode #er liberada a 8ual8uer momento+ para riar uma
aloa52o din=mia u#amo# a fun52o mallo da bibliotea #tdlib.h+ a fun52o mallo aloa uma
8uantidade e#peifia e retorna o endere5o de mem:ria para i##o #e fa) nee##;rio riar um ponteiro
do tipo e#peifio para reeber o endere5o+ na fun52o mallo u#amo# outra fun52o 8ue 6 o #i)eof
8ue retorna o tamanho e*ato do tipo+ tamb6m temo# 8ue pa##amo# omo ar4umento o tipo para o
#i)eof
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
int d.aria.elidinamia g mallo(#i)eof(int!!Z
d.aria.elidinamia g $%&Z
printf(^hd^+d.aria.elidinamia!Z
return ,Z
b
em al4un# ompiladore# 6 nee##;rio a on.er#2o de tMpea#t para o tipo do ponteiro+ tamb6m
.amo# aprender tMpea#t mai# para frente+ para liberar o endere5o o e#pa5o u#amo# a fun52o free da
bibliotea #tdlib.h e pa##amo# omo ar4umento o ponteiro 8ue tem o endere5o de mem:ria
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
int d.aria.elidinamia g mallo(#i)eof(int!!Z
d.aria.elidinamia g $%&Z
printf(^hd^+d.aria.elidinamia!Z
free(.aria.elidinamia!Z
return ,Z
b
tamb6m 6 po##7.el riar .etore# pelo mallo ba#ta multipliar pela 8uantidade de#e3ada
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
int d.aria.elidinamia g mallo(#i)eof(int! d /!Z
.aria.elidinamia[,\ g $%&Z
.aria.elidinamia[%\ g %,,Z
printf(^hd Vn^+.aria.elidinamia[,\!Z
printf(^hd^+.aria.elidinamia[%\!Z
free(.aria.elidinamia!Z
return ,Z
b
tamb6m 6 po##7.el riar matri)e# om mallo+ embora #e3a um pouo ompliado ter 8ue aloar
e#pa5o a ada #e4mento#
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
int dd.aria.elidinamia g mallo(#i)eof(int! d /!Z
.aria.elidinamia[,\ g mallo(#i)eof(int! d /!Z
.aria.elidinamia[%\ g mallo(#i)eof(int! d /!Z
.aria.elidinamia[,\[,\ g $%&Z
.aria.elidinamia[%\[,\ g %,,Z
printf(^hd Vn^+.aria.elidinamia[,\[,\!Z
printf(^hd^+.aria.elidinamia[%\[,\!Z
free(.aria.elidinamia!Z
return ,Z
b
o e*emplo aima #eria o me#mo 8ue riar uma arraM Jint .aria.elidinamia[/\[/\K+ tamb6m e*i#te a
fun52o allo da bibliotea #tdlib.h 8ue permite aloar uma determinada 8uantidade de .e)e# um
e#pa5o ela 6 e8ui.alente ao mallo multipliado+ para u#ar ele pa##amo# omo ar4umento a
8uantidade de .e)e# 8ue .ai aloar e tamanho da aloa52o

Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
int d.aria.elidinamia g allo(/+#i)eof(int!!Z
.aria.elidinamia[,\ g $%&Z
.aria.elidinamia[%\ g %,,Z
printf(^hd Vn^+.aria.elidinamia[,\!Z
printf(^hd^+.aria.elidinamia[%\!Z
free(.aria.elidinamia!Z
return ,Z
b
8uando prei#amo# realoar um e#pa5o podemo# u#ar a fun52o reallo da bibliotea #tdlib.h+ nela
pa##amo# omo ar4umento o ponteiro 8ue .ai #er realoado e o no.o tamanho
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
int d.aria.elidinamia g mallo(#i)eof(int! d &!Z
reallo(.aria.elidinamia+#i)eof(int!!Z
d.aria.elidinamia g $%&Z
printf(^hd Vn^+d.aria.elidinamia!Z
free(.aria.elidinamia!Z
return ,Z
b
na lin4ua4em C++ podemo# u#ar o operador ne' para aloar um determinado tipo ou e#trutura na
mem:ria e o operador delete para liberar
Oinlude ]io#treamW
int main(.oid!
a
int d.aria.elidinamia g ne' intZ
d.aria.elidinamia g $%&Z
#td::out ]] d.aria.elidinamiaZ
delete .aria.elidinamiaZ
return ,Z
b
tamb6m 6 po##7.el aloar arraM pelo operador ne'
Oinlude ]io#treamW
int main(.oid!
a
int d.aria.elidinamia g ne' int($!Z
.aria.elidinamia[,\ g $%&Z
#td::out ]] .aria.elidinamia[,\Z
delete[\ .aria.elidinamiaZ
return ,Z
b
e*i#te a# aloa59e# e#t;tia#+ e##a# aloa59e# permite arma)enar um .alor em uma .ari;.el loal
8ue n2o #er; de#tru7da 3unto om a fun52o e##a# .ari;.ei# #2o mai# utili)ada# em fun59e#
reur#i.a#+ para tornar uma .ari;.el e#t;tia ba#ta u#ar o operador #tati ante# do tipo da .ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
#tati int .aria.elZ
return ,Z
b
-.: ntrada de dados /input0
3; .imo# di.er#o# modo# de #a7da# de dado# para o monitor a4ora .amo# li#tar al4un# de entrada de
dado# do telado+ a fun52o put# da bibliotea #tdio.h mo#tra uma #trin4 na tela 3; a fun52o 4et#
arma)ena al4o 8ue di4itarmo# do telado em uma arraM do tipo har+ para u#ar e##a fun52o ba#ta
pa##ar omo ar4umento a arraM onde ela .ai arm)enar+ 8uando o pro4rama he4ar ne##a parte o
terminal .ai fiar tra.ado e#perando o u#uario di4itar e depoi# apertar enter+ e##a fun52o #: permite
arma)enar #trin4# e de.e #er u#ada om muito uidado e.itando uma falha onheida omo buffer
o.erflo' 8ue on#i#te do u#u;rio adiionar dado# maior 8ue o tamanho da arraM a##im ae##ando
outro endere5o de mem:ria
Oinlude ]#tdio.hW
int main(.oid!
a
har nome[%,,\Z
4et#(nome!Z
put#(nome!Z
return ,Z
b
outra forma de arma)enar em .ari;.ei# e#peifia# 6 u#ar o #anf da bibliotea #tdio.h+ para u#ar
e##a bibliotea temo# 8ue definir o tipo para i##o u#amo# a# me#ma# formata59e# 8ue o printf e
depoi# o endere5o de mem:ria da .ari;.el 8ue .amo# arma)enar+ a de#.anta4em do #anf 8ue
arma)enamento de #trin4 ele n2o on#e4ue apturar o e#pa5o ent2o 6 reomendado u#ar o 4et# para
#trin4 e o #anf para o# outro# tipo#
Oinlude ]#tdio.hW
int main(.oid!
a
int idadeZ
#anf(^hd^+Yidade!Z
printf(^hd^+idade!Z
return ,Z
b
uma fun52o de entrada 8ue 3; u#amo# 6 o 4eth ou 4ethar da bibliotea onio.h+ para u#ar e##a
fun52o ba#ta atribuir ela a uma .ari;.el do tipo har e ela apena# arma)ena um ar;ter+ uma
pe8uena ob#er.a52o e##a fun52o n2o tem no linu*
Oinlude ]#tdio.hW
Oinlude ]onio.hW
int main(.oid!
a
har letraZ
letra g 4eth(!Z
printf(^h^+letra!Z
return ,Z
b
O 4ethar 6 pareido om a fun52o anterior a diferen5a 8ue .oL tem 8ue apertar enter
Oinlude ]#tdio.hW
Oinlude ]onio.hW
int main(.oid!
a
har letraZ
letra g 4ethar(!Z
printf(^h^+letra!Z
return ,Z
b
outra forma de entrar om dado# para #eu pro4rama 6 u#ar pa##a4em por ar4umento na fun52o
prinipal o famo#o ommand line+ para i##o ba#ta riar dua# .ari;.ei# uma inteira 8ue #er; um
ontador e o outro um ponteiro do tipo har+ 6 omum para o# pro4ramadore# em C/C++ u#a o
nome ar4 e ar4.+ depoi# ba#ta u#ar a# inde* do ar4. na ordem 8ue entro om o# omando# para o
pro4rama+ #e .oL u#a o omando J:VW pro4rama.e*e helpK o pro4rama.e*e #eria o ar4.[,\ e o
help 6 o ar4.[%\
Oinlude ]#tdio.hW
int main(int ar4+ har ddar4.!
a
printf(^h# Vn^+ar4.[,\!Z
printf(^h#^+ar4.[%\!Z
return ,Z
b
e*i#te um outro ar4umento no e*emplo anterior 8ue #eria outro ponteiro para a# .ari;.ei# de
ambiente
Oinlude ]#tdio.hW
int main(int ar4+ har ddar4.+ har ddar4p!
a
printf(^h#Vn^+ar4p[,\!Z
printf(^h#^+ar4p[%\!Z
printf(^h#^+ar4p[/\!Z
return ,Z
b
na lin4ua4em ++ podemo# u#ar in da bibliotea io#tream para arma)enar um .alor ou #trin4 na
em uma .ari;.el+ para u#ar o in temo# 8ue u#ar o name#pae #td i4ual ao out+ u#ar operador maior
dua# .e)e# #e4uido da .ari;.el
Oinlude ]io#treamW
int main(.oid!
a
har nome[%,,\Z
#td::in WW nomeZ
#td::out ]] nomeZ
return ,Z
b
-.; )anipulao de string
" bibliotea mai# u#ada para manipular uma #trin4 6 a bibliotea #trin4.h+ ela e*i#tem de)ena# de
fun59e# uma dela# 6 #trlen 8ue retorna a 8uantidade de ar;ter 8ue tem uma #trin4+ para u#ar e##a
fun52o ba#ta pa##ar omo ar4umento a #trin4
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
int tamZ
har eof[%,,\ g ^forum eof^Z
tam g #trlen(eof!Z
printf(^hd^+tam!Z
return ,Z
b
om a fun52o #trre. podemo# in.erter a #trin4
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
int tamZ
har eof[%,,\ g ^forum eof^Z
#trre.(eof!Z
printf(^h#^+eof!Z
return ,Z
b
om a fun52o #trupr tran#formamo# todo# o# ar;tere# em maiQ#ulo#
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
int tamZ
har eof[%,,\ g ^forum eof^Z
#trupr(eof!Z
printf(^h#^+eof!Z
return ,Z
b
om a fun52o #trl'r tran#formamo# todo# o# ar;tere# em minQ#ulo#
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
int tamZ
har eof[%,,\ g ^FON<B EOF^Z
#trl'r(eof!Z
printf(^h#^+eof!Z
return ,Z
b
a fun52o #trpM opia uma #trin4 para uma arraM+ para u#ar ela temo# 8ue pa##ar omo ar4umento a
arraM e depoi# a #trin4 a #er arma)enada
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\Z
#trpM(eof+^forum eof^!Z
printf(^h#^+eof!Z
return ,Z
b
#: lembrando 8ue n2o e po##7.el atribuir uma #trin4 em uma arraM diretamente #e prei#armo#
atribuir #trin4 a uma arraM 6 reomendado u#ar o #trpM
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\Z
har ft#[%,,\ g ^hft#$%&^Z //6 .alido iniiar a #trin4 3unto om a arraM
eof g ^forum eof^Z //n2o 6 .alido atribuir a #trin4 diretamente para arraM
eof[,\ g UfUZ //6 .alido atribuir arater por arater
return ,Z
b
para 3untar (onatenar! dua# #trin4# em uma arraM podemo# u#ar a fun52o #trat+ o u#o de##a
fun52o 6 pareida om a fun52o #trpM
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\ g ^forum ^Z
har ft#[%,,\ g ^eof^Z
#trat(eof+ft#!Z
printf(^h#^+eof!Z
return ,Z
b
om a fun52o #tr#tr d; para loali)ar uma oorrLnia de #trin4 dentro de uma #trin4 ou #e3a uma #ub
#trin4+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento a #trin4 onde .amo# prourar e a outra
#trin4 8ue #er; pe#8ui#ada+ tamb6m temo# 8ue atribuir o retorno da fun52o para um ponteiro do tipo
har
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\ g ^.i#item o forum eof^Z
har dponteiroZ
ponteiro g #tr#tr(eof+^forum^!Z
printf(^h#^+ponteiro!Z
return ,Z
b
?odemo# u#ar a fun52o #trhr para loali)ar a primeira oorreria de um aratere+ o u#o de##a
fun52o 6 pareida om #tr#tr
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\ g ^.i#item o forum eof^Z
har dponteiroZ
ponteiro g #tr#tr(eof+UfUU!Z
printf(^h#^+ponteiro!Z
return ,Z
b
@anto a fun52o #tr#tr e a fun52o #trhr podemo# e*ibir a 8uantidade de aratere# ate a oorrLnia+
para i##o ba#ta #ubtrair o ponteiro pela #trin4
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\ g ^.i#item o forum eof^Z
har dponteiroZ
ponteiro g #tr#tr(eof+^forum^!Z
printf(^hd^+ponteiro > eof!Z
return ,Z
b
para #abe #e uma #trin4 6 idLntia a outra #trin4 u#amo# a fun52o #trmp+ e##a fun52o ompara todo#
o# aratere# da# dua# #trin4 a#o #e3a idLntio .ai retornar o nQmero ,+ a#o a primeira #trin4 #e3a
maior ira retorna um nQmero po#iti.o+ a#o a #e4unda #e3a maior ira retorna ne4ati.o+ e##a fun52o
#er; muito u#ada na e#trutura de ondi52o para omparar dua# #trin4#
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
har eof[%,,\ g ^.i#item o forum eof^Z
har ft#[%,,\ g ^.i#item o forum eof^Z
int lolZ
lol g #trmp(eof+ft#!Z
printf(^hd^+lol!Z
return ,Z
b
podemo# u#ar a fun52o #printf da bibliotea #tdio.h para arma)enar uma #trin4 formatada em uma
arraM+ o u#o de##a fun52o e pareida om o printf por6m temo# 8ue definir a arraM 8ue #er;
arma)enada omo ar4umento ante#
Oinlude ]#tdio.hW
int main(.oid!
a
har eof[%,,\Z
int .alor g $%&Z
#printf(eof+^numero g hd^+.alor!Z
printf(^h#^+eof!Z
return ,Z
b
-.< )anipulao de carcter
Como 3; #abemo# ada #trin4 6 um on3unto de aratere# ou uma arraM do tipo har 8ue pode #er
manipulada pelo po#i52o dela+ podemo# manipular e##e# aratere# um a um u#ando al4uma#
bibliotea# entre ela# tMpe.h+ uma da# fun59e# de##a bibliotea 6 o toupper 8ue on.erte o ar;ter
para maiQ#ulo para u#ar ela ba#ta pa##ar omo ar4umento o arater e pe4ar o retorno dela
on.ertida
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g UfUZ
eof g toupper(eof!Z
printf(^h^+eof!Z
return ,Z
b
@ambem e*i#te a fun52o tolo'er da bibliotea tMpe.h 8ue fa) o opo#to da anterior
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g UFUZ
eof g tolo'er(eof!Z
printf(^h^+eof!Z
return ,Z
b
podemo# u#ar a fun52o i#di4it da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um
ar;ter (U,U ate U1U! e retorna o .alor , a#o n2o #e3a nenhum da8uele# arater
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g U&UZ
int ft#Z
ft# g i#di4it(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
podemo# u#ar a fun52o i#*di4it da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a
um ar;ter he*adeimal (U,U ate U1U e UaU ate UfU! e retorna o .alor , a#o n2o #e3a nenhum da8uele#
ar;ter
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g UfUZ
int ft#Z
ft# g i#*di4it(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
podemo# u#ar a fun52o i#alnum da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a
um ar;ter alfa num6rio (U,U ate U1U e UaU ate U)U! e retorna o .alor , a#o n2o #e3a nenhum da8uele#
ar;ter
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g U)UZ
int ft#Z
ft# g i#alnum(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
podemo# u#ar a fun52o i#a#ii da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a
um odi4o a#ii (,, ate %/H! e retorna o .alor , a#o n2o #e3a nenhum da8uele odi4o
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g UdUZ
int ft#Z
ft# g i#a#ii(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
podemo# u#ar a fun52o i#toupper da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a
um ar;ter #e3a maiQ#ulo e retorna o .alor , a#o n2o #e3a
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g U"UZ
int ft#Z
ft# g i#toupper(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
podemo# u#ar a fun52o i#tolo'er da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a
um ar;ter #e3a minu#ulo e retorna o .alor , a#o n2o #e3a
Oinlude ]#tdio.hW
Oinlude ]tMpe.hW
int main(.oid!
a
har eof g UaUZ
int ft#Z
ft# g i#tolo'er(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
7.0 L=gica aritm>tica
O ponto forte da pro4rama52o 6 a l:4ia ondiional e aritm6tia+ por8ue #e a 4ente pereber o
omputador #: proe##a dado# e e##e# dado# no final #2o nQmero# bin;rio#+ ou #e3a um #imple#
mo.imento do mou#e ou ate me#mo pi*el na tela #2o apena# #e8uenia# de % e ,+ a lin4ua4em C/C+
+ permite manipular nQmero# da me#ma forma 8ue far7amo# om uma aneta e papel por6m
milhare# de .e)e# r;pido e #em erro# (#: lembrando uma m;8uina nuna erra e nuna an#a+ e pode
proe##ar nQmero# milhare# de .e)e# em #e4undo#!+ a# opera59e# mai# u#ada# na matem;tia #2o
#oma+ #ubtra52o+ multiplia52o e di.i#2o+ boa parte da# demai# opera59e# pode #er feita# de al4uma
forma por e##a# E opera59e#+ uma da# bibliotea# mai# u#ada# 6 a math.h embora a# opera59e#
itada# anteriormente n2o prei#e de##a bibliotea+ al4un# #7mbolo# 8ue #2o u#ado na matem;tia
de.e #er #ub#titu7do por al4un# u#ado# na inform;tia omo por e*emplo na multiplia52o u#amo# o
a#teri#o (d! e na di.i#2o a barra (/!+ na adi52o u#amo# o mai# (+! e na #ubtra52o u#amo# o h7fen (>!+
podemo# fa)er 8ual8uer uma de##a# opera59e# e atribuir o re#ultado a uma .ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
int #oma+ #ubt+ mult+ di.iZ
#oma g $ + &Z
#ubt g %, > &Z
mult g / d HZ
di.i g %, / $Z
printf(^hd Vn^+#oma!Z
printf(^hd Vn^+#ubt!Z
printf(^hd Vn^+mult!Z
printf(^hd^+di.i!Z
return ,Z
b

#: lembrando 8ue al4uma# opera59e# omo di.i#2o aaba #obrando nQmero por e*emplo %,/$ #obra
% e##e nQmero #e hama re#to ou modulo+ para a 4ente on#e4uir o modulo de uma di.i#2o u#amo#
o operador porenta4em (h! no lu4ar da barra
Oinlude ]#tdio.hW
int main(.oid!
a
int modulo g %, h $Z
printf(^hd^+modulo!Z
return ,Z
b

tamb6m podemo# fa)er mai# de uma opera52o a##im
Oinlude ]#tdio.hW
int main(.oid!
a
int modulo g %, + $ > &Z
printf(^hd^+modulo!Z
return ,Z
b
porem #e hou.er multiplia52o/di.i#2o entre a# opera59e# de #oma/#ubtra52o ele .ai fa)er primeiro
a# de multiplia52o/di.i#2o+ ent2o o re#ultado de /+&d/ g %/ ao in.6# do re#ultado %E
Oinlude ]#tdio.hW
int main(.oid!
a
int modulo g / + & d /Z
printf(^hd^+modulo!Z
return ,Z
b
para e.itar i##o oloamo# entre parLnte#e# a# opera59e# meno# #i4nifiati.a para #er feito primeiro
Oinlude ]#tdio.hW
int main(.oid!
a
int modulo g (/ + &! d /Z
printf(^hd^+modulo!Z
return ,Z
b
o e*emplo anterior tamb6m poderia #er feito a##im
Oinlude ]#tdio.hW
int main(.oid!
a
int modulo g ((/ + &! d /!Z
printf(^hd^+modulo!Z
return ,Z
b
6 po##7.el fa)er opera59e# om uma .ari;.el e atribuir a ela me#mo
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g %,Z
eof g eof + &Z
printf(^hd^+eof!Z
return ,Z
b
8uando fa)emo# uma opera52o matem;tia para atribuir a me#ma .ari;.el podemo# u#ar o #7mbolo
da opera52o #e4uida do #7mbolo de i4ual e o nQmero i##o #eria uma #obrear4a de operadore#+ o
e*emplo abai*o #eria o me#mo 8ue o anterior
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g %,Z
eof +g &Z
printf(^hd^+eof!Z
return ,Z
b
tamb6m 6 po##7.el inrementar ou derementar um nQmero de um .ari;.el adiionado doi#
#7mbolo# de mai# ou doi# #7mbolo# de meno# na frente da .ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
int * g $,,+ M g %,,Z
*++Z
M>>Z
printf(^* g hd VnM g hd^+*+M!Z
return ,Z
b
6 po##7.el fa)er o me#mo adiionando o# #7mbolo# de ++/>> ante# da .ari;.el+ a diferen5a e omo o
ompilador .ai interpretar a inrementa52o na8uele momento .amo# .er melhor a diferen5a na
parte de e#trutura de repeti52o
Oinlude ]#tdio.hW
int main(.oid!
a
int * g $,,+ M g %,,Z
++*Z
>>MZ
printf(^* g hd VnM g hd^+*+M!Z
return ,Z
b
om a fun52o po' da bibliotea math.h podemo# retornar a pontenia de um nQmero+ para u#ar ela
ba#ta pa##ar omo ar4umento o nQmero e o outro nQmero 8ue .ai ele.ar a potLnia
Oinlude ]#tdio.hW
Oinlude ]math.hW
int main(.oid!
a
int eof g po'($+/!Z
printf(^hd^+eof!Z
return ,Z
b
para #aber a rai) 8uadrada ba#ta u#ar a fun52o #8rt e pa##ar omo ar4umento o nQmero depoi# pe4a
o retorno
Oinlude ]#tdio.hW
Oinlude ]math.hW
int main(.oid!
a
float eof g #8rt($!Z
printf(^hf^+eof!Z
return ,Z
b
para retornar o .alor ab#oluto de um nQmero u#amo# a fun52o ab#
Oinlude ]#tdio.hW
Oinlude ]math.hW
int main(.oid!
a
int eof g ab#($%&!Z
printf(^hd^+eof!Z
return ,Z
b
om a fun52o floor ele retorna o nQmero om a parte 8uebrada )erada ($.%& g $.,!
Oinlude ]#tdio.hW
Oinlude ]math.hW
int main(.oid!
a
float eof g floor($.%&!Z
printf(^hf^+eof!Z
return ,Z
b
om a fun52o eil a a4ente truna o nQmero inrementado mai# % ($.%& g E.,!
Oinlude ]#tdio.hW
Oinlude ]math.hW
int main(.oid!
a
float eof g eil($.%&!Z
printf(^hf^+eof!Z
return ,Z
b
podemo# .er 8ue 8uando u#amo# .aria.ei# do tipo float ele n2o formata o# )ero# dei*ando um
nQmero 4rande ($.%& g $.%&,,,,!+ para formatar a #a7da do nQmero float podemo# oloar a
8uantidade m;*ima 8ue ele .ai e*ibir 3unto ao :di4o de e#ape hf+ para fa)er i##o ante# do JfK
oloamo# um ponto #e4uido do nQmero 8ue .ai #er e*ibido no meu a#o o nQmero 8uebrado 6 o %&
ent2o #2o apena# doi# nQmero# fiando h./f
Oinlude ]#tdio.hW
int main(.oid!
a
float eof g $.%&Z
printf(^h./f^+eof!Z
return ,Z
b
e*i#tem outra# fun59e# da bibliotea math.h por6m n2o .amo# no# aprofundar muito
7.1 Logica ,ooleana
E##e tipo de l:4ia di) #e determinada a52o 6 .erdadeira ou fal#a+ e##a a52o poderia #er 8ual8uer
oi#a dei# de uma .ari;.el riada ou n2o+ #e determinado ar;ter 6 e*i#tente em uma #trin4 ou n2o+
#e o pro4rama u#a interfae (<I ou n2o+ 8ual8uer oi#a pode #er definida omo uma lo4ia
booleana por e*emplo J.oL e#t; lendo e##e ebook+ #im ou naojK+ a l:4ia boolena n2o on#i#te em
#aber omo aonteeu e #im #e aonteeu e depoi# retorna #im ou n2o (podemo# di)er 8ue a lo4ia
booleana 6 o Min Man4 da pro4rama52o!+ para on.erter o true/fal#e para a pro4rama52o u#amo# o
nQmero % e ,+ o nQmero % 6 true e o nQmero , 6 fal#e embora 8ual8uer nQmero aima de % tamb6m
6 true e 8ual8uer nQmero abai*o de , 6 fal#e
Oinlude ]#tdio.hW
int main(.oid!
a
int . g &+ f g >&Z
printf(^.erdadeiro g hd Vn^+.!Z
printf(^fal#o g hd^+f!Z
return ,Z
b
e*i#te um tipo de .ari;.el 8ue n2o 6 padr2o na lin4ua4em C por6m ele #e torna padr2o na
lin4ua4em C+++ e##e tipo 6 o bool e para u#ar ele na lin4ua4em C temo# 8ue delarar a bibliotea
#tdbool.h+ 3a na lin4ua4em C++ n2o 6 nee##;rio delarar
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
bool .erdade g %Z
bool fal#o g ,Z
return ,Z
b
na bibliotea #tdbool.h tamb6m temo# a on#tante true e fal#e 8ue 6 e8ui.alente ao .alor % e ,
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
bool .erdade g trueZ
bool fal#o g fal#eZ
return ,Z
b
embora o u#o do true/fal#e #e3a o me#mo 8ue u#ar %/, u#ando o true/fal#e dei*a o pro4rama mai#
le47.el
7.2 ?perao ,it a ,it
"# opera59e# bit a bit manipula ada bit de um bMte+ % bit 6 a menor 8uantidade de dado# 8ue
omputador on#e4ue ler e um bit #: tem dua# po##ibilidade# % e ,+ ent2o n2o e*i#tem muita# oi#a#
8ue poderia #e fa)er om apena# um bit (tem a l:4ia booleana kkkkkkk!+ um Qnio bit n2o d; para
repre#entar todo# o# aratere# do alfabeto para i##o #e fe) nee##;rio riar uma #e8uenia de bit#
8ue hamamo# de bMte#+ um bMte 6 uma #e8uenia de H bit# 8ue 6 e8ui.alente a /&G po##ibilidade#+
por e*emplo a letra JaK 6 um bMte 8ue tem a repre#enta52o deimal do nQmero 10 e em bin;rio do
:di4o ,%%,,,,% ada nQmero dali 6 um bit+ a# opera59e# bit a bit manipula o bit alterando ele de
aordo om re4ra# e#peifia#+ a primeira opera52o 6 ON (ou!+ a opera52o bit a bit ON manipula
doi# bMte# omparando um om o outro ada bit e 4erando um $k bMte+ #e um do# doi# bit# for
.erdadeiro ou #e3a % o re#ultado do bit #er; .erdadeiro
,%%,,,,% g a (10!
,%%,,,%, g b (1H!
,%%,,,%% g (11!
para #e fa)er a opera52o bit a bit ON na lin4ua4em C/C++ u#amo# o operador pipe (l!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g 10 l 1HZ
printf(^hd^+eof!Z
return ,Z
b
outra opera52o bit a bit 6 o "ND (e!+ e##a opera52o tamb6m ompara doi# bMte# e 4era um $k+ por6m
o re#ultado #: .ai #er .erdadeiro #e o# doi# bit# for .erdadeiro
,%%,,,,% g a (10!
,%%,,,%, g b (1H!
,%%,,,,, g n2o lembro o 8ue 6 i##o (1G!
para fa)er a opera52o bit a bit "ND na lin4ua4em C/C++ u#amo# o operador JeK omerial (Y!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g 10 Y 1HZ
printf(^hd^+eof!Z
return ,Z
b
tamb6m e*i#te uma opera52o bit a bit hamador eON (ou e*lu#i.o!+ e##a opera52o tamb6m
ompara doi# bMte# e 4erando um $k+ por6m o re#ultado #: .ai #er .erdadeiro #e o# doi# bit# for
diferente um do outro
,%%,,,,% g a (10!
,%%,,,%, g b (1H!
,,,,,,%% g #: #ei 8ue 6 um :di4o U>U ($!
para u#ar a opera52o bit a bit eON u#amo# e##e #7mbolo m
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g 10 m 1HZ
printf(^hd^+eof!Z
return ,Z
b
diferente do# outro# anteriore# a opera52o bit a bit NO@ (ne4a52o! in.erte todo# o# bit de um Qnio
bMte
,%%,,,,% g a (10!
%,,%%%%, g deu ne4ati.o de.ido o primeiro nQmero #er % (>1H!
para u#ar a opera52o bit a bit NO@ na lin4ua4em C/C++ u#amo# o operador til ante# do .alor (`!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g ` 10Z
printf(^hd^+eof!Z
return ,Z
b
7.! ?peradores de comparao e logico
@amb6m e*i#te o# operadore# de ompara52o e operadore# l:4io#+ o# operadore# de ompara52o
ompara doi# .alore# retornando .erdadeiro ou fal#o (%/,!+ o primeiro operador 8ue .amo# .er 6 o
operador de i4ualdade+ ele ompara doi# .alore# #e o# doi# .alore# for i4ual ele retorna % #e for
diferente ele retorna ,+ n2o 6 po##7.el omparar uma #trin4 inteira apena# um Qnio ar;ter ou
nQmero+ para e##e operador u#amo# dua# .e)e# o #7mbolo de i4ual (gg!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%& gg %,,Z
printf(^hd^+eof!Z
return ,Z
b
e*i#te o operador diferente 8ue 6 opo#to do operador i4ual+ a#o #e3a diferente ele retorna
.erdadeiro e a#o #e3a i4ual ele retorna fal#o+ para u#ar e##e operador u#amo# o #imbolo de
e*lama52o e o #7mbolo de i4ual (fg!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%& fg %,,Z
printf(^hd^+eof!Z
return ,Z
b
outro operador 6 o operador Jmaior 8ueK+ e##e operador retorna .erdadeiro a#o o .alor #e3a maior
8ue o outro para u#ar ba#ta u#ar o #7mbolo de maior (W!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%& W %,,Z
printf(^hd^+eof!Z
return ,Z
b
tem o operador Jmaior ou i4ual aK+ e##e operador retorna .erdadeiro #e o .alor for maior ou i4ual ao
outro+ para u#ar e##e operador u#amo# o #7mbolo de maior #e4uido do #7mbolo de i4ual (Wg!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%& Wg %,,Z
printf(^hd^+eof!Z
return ,Z
b
tamb6m e*i#te o operador Jmenor 8ueK+ e##e operador retorna .erdadeiro #e o .alor for menor 8ue o
outro+ para u#ar e##e operador u#amo# o #7mbolo de menor (]!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%& ] %,,Z
printf(^hd^+eof!Z
return ,Z
b
om o operador Jmenor ou i4ual aK ele retorna .erdadeiro #e o .alor for menor ou i4ual ao outro+
para u#ar e##e operador u#amo# o #7mbolo de menor #e4uido do #7mbolo de i4ual (]g!
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%& ]g%,,Z
printf(^hd^+eof!Z
return ,Z
b
tamb6m e po##7.el u#ar o# operadore# l:4io# e##e# operadore# ompara o# doi# .alore# retornando
.erdadeiro ou fal#o+ e##e# operadore# tem o# me#mo# nome# do# operadore# bit a bit mai# n2o
onfunda um om o outro (o# operadore# bit a bit ompara ada bit de um bMte retornando um no.o
bMte e o# l:4io# ompara doi# .alore# retornando .erdadeiro ou fal#o!+ o primeiro operador lo4io
.ai #er o ON e##e operador ompara doi# .alore# e retorna .erdadeiro #e um do# doi# for .erdadeiro
(#: lembrando 8ual8uer nQmero maior 8ue , 6 .erdadeiro e 8ual8uer numero menor ou i4ual a , 6
fal#o!+ para u#ar o operador lo4io ON u#amo# dua# .e)e# o #imbolo do pipe (ll!
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
int eof g true ll fal#eZ
printf(^hd^+eof!Z
return ,Z
b
o operador l:4io "ND retorna .erdadeiro apena# #e o# doi# .alore# for .erdadeiro+ para u#ar ele
u#amo# dua# .e)e# o JeK omerial (YY!
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
int eof g true YY fal#eZ
printf(^hd^+eof!Z
return ,Z
b
o operador NO@ in.erte a l:4ia torando um .alor .erdadeiro ou fal#o+ para u#ar ele oloamo# o
#7mbolo de e*lama52o ante#
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
int eof g f trueZ
printf(^hd^+eof!Z
return ,Z
b
#e .oL# lembra da fun52o #trmp da bibliotea #trin4.h ele retorna o nQmero , a#o a# dua# #trin4#
#e3a i4ual+ #e ele retorna o .alor , i##o 8uer di)er 8ue em termo l:4io #eria fal#o e #e a 4ente
omparar om uma e#trutura de ondi52o o ompilador .ai interpretar i##o omo fal#o e n2o fa)er a
ondi52o+ para i##o e*i#te o operador NO@ para in.erter a l:4ia
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
int eof g f #trmp(^eof^+^eof^!Z
printf(^hd^+eof!Z
return ,Z
b
tamb6m podemo# u#ar o parLnte#e para #obrearre4ar o# operadore#
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
int eof g (f ((true YY true ! ll fal#e!! Z
printf(^hd^+eof!Z
return ,Z
b
7.- strutura condicional
"# e#trutura# ondiionai# permite ab#trair ou n2o determinada# parte# do :di4o #obre uma
ondi52o l:4ia+ om e##a ondi52o .oL pode e#olher o 8ue #er; e*eutado a#o a ondi52o #e3a
.erdadeira ou o 8ue #er; e*eutado a#o a ondi52o #e3a fal#o+ e*i#tem pelo meno# trL# e#trutura#
ondiionai# na lin4ua4em C/C++ #2o ela# o if+ #'ith e ternaria+ a# trL# ondi59e# pode #er u#ada#
para o me#mo prop:#ito embora o u#o de uma em determinada #itua52o pode dei*a o :di4o mai#
le47.el+ a primeira ondi52o 8ue .amo# .er 6 o if e##a ondi52o permite e*eutar determinada parte
do :di4o #e a ondi52o dentro do ar4umento for .erdadeiro+ tamb6m oloamo# um e#opo para o#
:di4o# 8ue #er; e*eutado
Oinlude ]#tdio.hW
int main(.oid!
a
if($%& W %,,!
a
printf(^$%& e maior 8ue %,,^!Z
b
return ,Z
b
outro e*emplo om mai# de um if
Oinlude ]#tdio.hW
int main(.oid!
a
if($%& W %,,!
a
printf(^$%& e maior 8ue %,,^!Z
b
if($%& ] %,,!
a
printf(^$%& e menor 8ue %,,^!Z
b
return ,Z
b
para e.itar riar .;rio# if para o me#mo prop:#ito podemo# u#ar o Jel#e ifK+ a ondi52o Jel#e ifK #:
#er; e*eutada #e nenhuma da# ondi59e# anteriore# for e*eutada e 8uando uma for e*eutada
nenhuma outra ondi52o #er; e*eutada+ para u#ar o Jel#e ifK prei#a de uma ondi52o if ante#
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%&Z
if(eof W %,,!
a
printf(^maior 8ue %,,^!Z
b
el#e if(eof ] %,,!
a
printf(^$%& e menor 8ue %,,^!Z
b
return ,Z
b
#e prei#amo# e*eutar determinada ondi52o a#o nenhuma da# anteriore# for e*eutada u#amo#
um el#e+ o el#e #empre tem 8ue fiar depoi# do if ou do Qltimo Jel#e ifK e ele n2o tem ar4umento#
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g %,,Z
if(eof W %,,!
a
printf(^maior 8ue %,,^!Z
b
el#e if(eof ] %,,!
a
printf(^menor 8ue %,,^!Z
b
el#e
a
printf(^#eu numero e i4ual a %,,^!Z
b
return ,Z
b
podemo# oloar uma e#trutura ondiional dentro da outra
Oinlude ]#tdio.hW
int main(.oid!
a
int idade g &1Z
if(idade W %H!
a
printf(^.oe 3a e de maior^!Z
if(idade ] &,!
a
printf(^.oe ainda e no.o ^!
b
el#e
a
printf(^.oe e .elho U>U ^!Z
b
b
el#e
a
printf(^.oe ainda nao pode diri4ir^!
b
return ,Z
b
tamb6m d; para e*eutar o if #em e#opo+ por6m fia muito inle47.el
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g $%&Z
if (eof W %,,!
printf(^maior^!Z
el#e if(eof ] %,,!
printf(^menor^!Z
return ,Z
b
a outra ondi52o 6 o #'ith 8ue tem a me#ma utilidade do Jif>el#e ifK+ para u#ar o #'ith temo# 8ue
definir o .alor nele e u#ar o a#e para hear #e o nQmero 6 o me#mo+ no a#e oloamo# o .alor
depoi# doi# ponto# #e4uido do 8ue .ai #er e*eutado a#o #e3a .erdadeiro+ tamb6m #empre temo#
8ue oloar um break a ada final de a#e para e.itar ler o pr:*imo a#e
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g %,,Z
#'ith(eof!
a
a#e %:
printf(^eof g %^!Z
breakZ
a#e %,,:
printf(^eof g %,,^!Z
breakZ
a#e $%&:
printf(^eof g $%&^!Z
breakZ
b
return ,Z
b
podemo# u#ar o default a#o nenhuma da# ondi59e# anteriore# forem e*eutada# ele #er; e*eutado
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g &,,Z
#'ith(eof!
a
a#e %:
printf(^eof g %^!Z
breakZ
a#e %,,:
printf(^eof g %,,^!Z
breakZ
a#e $%&:
printf(^eof g $%&^!Z
breakZ
default:
printf(^nenhuma opao^!Z
breakZ
b
return ,Z
b
outra e#trutura de ondi52o 6 a ternaria 8ue permite um retorno #obre uma determinada ondi52o+
para u#ar a ondi52o ternaria u#amo# um ar4umento 8ue 6 a ondi52o oloamo# interro4a52o
#e4uido do primeiro retorno a#o #e3a .erdadeiro+ oloamo# doi# ponto# e o #e4undo retorno a#o
#e3a fal#o+ no e*emplo abai*o ele .ai retorna o maior .alor
Oinlude ]#tdio.hW
int main(.oid!
a
int * g ($%& W %,,! j $%& : %,,Z
printf(^hd^+*!Z
return ,Z
b
podemo# u#ar na# ondi59e# ternaria# 8ual8uer tipo de retorno
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
(true! j printf(^end of file^! : printf(^eof^!Z
return ,Z
b
7.7 @ strutura de repetio
"# e#trutura# de repeti52o permite repetir uma 8uantidade de .e)e# uma determinada parte do
:di4o #obre uma determinada ondi52o+ e*i#tem pelo meno# E e#trutura# de repeti52o #2o ela#
'hile+ do>'hile+ for e 4oto+ a e#trutura de repeti52o 'hile repete en8uanto 8ue a ondi52o dela for
.erdadeira a##im 8ue a ondi52o for fal#a o loop #e##a #e e##a ondi52o for #empre .erdadeira o
loop #er; infinito e a# .e)e# tra.ando o pro4rama na8uela parte+ loop infinito pode #er peri4o#o a#
.e)e# omo na hora de e*eutar um pro4rama ou aloar mem:ria #e e#ti.er pre#o ao um loop
infinito pode tra.ar o omputador de.ido ao 4a#to de mem:ria+ para u#ar o 'hile temo# 8ue oloar
a ondi52o omo ar4umento+ a ada loop o pro4rama .ai hear de no.o a ondi52o para .er #e .ai
ou n2o fa)er mai# um loop+ depoi# da ondi52o riamo# um e#opo onde oloamo# o :di4o 8ue
.ai #er repetido
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
'hile(true!
a
printf(^forum eof Vn^!Z
b
return ,Z
b
para e.itar 8ue o pro4rama fi8ue pre#o a um loop infinito temo# 8ue riar um ontador e
inrementar o ontador a ada loop ate determinada ondi52o+ no e*emplo a bai*o o ontador
ome5a om o nQmero % e a ada loop hea para .er #e a ondi52o do ontador e maior do 8ue %,
a#o n2o #e3a ele fa) o loop de no.o+ a ada loop o ontador .ai inrementar mai# um 8uando o
ontador he4ar no nQmero %% a ondi52o .ai dar fal#o e #e##ar o loop
Oinlude ]#tdio.hW
int main(.oid!
a
int ontador g %Z
'hile(ontador ]g %,!
a
printf(^hd Vn^+ontador!Z
ontador++Z
b
return ,Z
b
para #e##ar um loop podemo# u#ar o break+ no e*emplo abai*o ele fiaria pre#o ao um loop infinito
#e n2o ti.er o break
Oinlude ]#tdio.hW
Oinlude ]#tdbool.hW
int main(.oid!
a
'hile(true!
a
breakZ
b
return ,Z
b
al6m do break e*i#te o ontinue 8ue fa) mai# um loop me#mo #e a ondi52o for fal#a+ no e*emplo
abai*o ele fia pre#o em um loop infinito
Oinlude ]#tdio.hW
int main(.oid!
a
int ontador g %Z
'hile(ontador ]g %,!
a
ontinueZ
ontador++Z
b
return ,Z
b
o la5o 'hile #: repete #e a ondi52o for .erdadeira me#mo #e for o primeiro loop+ 3; o la5o do>'hile
ele repete pelo meno# uma .e) o la5o e #e a ondi52o for .erdadeira o loop ontinua ate 8ue a
ondi52o #e3a fal#a+ para u#ar o do>'hile u#amo# o JdoK riamo# um e#opo para o :di4o 8ue #er;
repetido+ depoi# riamo# um 'hile #em e#opo om a ondi52o
Oinlude ]#tdio.hW
int main(.oid!
a
int ontador g %Z
do
a
printf(^hd Vn^+ontador!Z
ontador++Z
b
'hile(ontador ]g %,!Z
return ,Z
b
o la5o JforK permite e#peifiar o ontador+ a ondi52o e o inremento+ para u#ar o la5o for riamo#
uma .ari;.el 8ue #er; o ontador depoi# pa##amo# omo ar4umento e##a .ari;.el+ a ondi52o e o
inremento da .ari;.el #eparado por ponto e .7r4ula e por fim o e#opo onde fia o :di4o 8ue #er;
repetido
Oinlude ]#tdio.hW
int main(.oid!
a
int ontador g %Z
for(ontador Z ontador ]g %, Z ontador++!
a
printf(^hd Vn^+ontador!Z
b
return ,Z
b
por fim o 4oto 8ue n2o 6 e*atamente um la5o e #im um pulo para determinada parte do odi4o
embora #e3a limitado ao me#mo e#opo da fun52o+ para u#ar o 4oto temo# 8ue riar um label 8ue
pode #er 8ual8uer nome #e4uindo de doi# ponto#+ depoi# do label riado ba#ta u#ar 4oto #e4uido do
nome do label para ele pular
Oinlude ]#tdio.hW
int main(.oid!
a
4oto eofZ
eof:
return ,Z
b
o e*emplo abai*o #eria um loop infinito
Oinlude ]#tdio.hW
int main(.oid!
a
eof:
4oto eofZ
return ,Z
b
podemo# manipular o 4oto u#ando o if para e.itar um loop infinito
Oinlude ]#tdio.hW
int main(.oid!
a
int ontador g %Z
eof:
if(ontador W %,!
a
4oto ft#Z
b
printf(^hdVn^+ontador!Z
ontador++Z
4oto eofZ
ft#:
return ,Z
b
:.0 4uno e recursi1idade
3; u#amo# di.er#a# fun59e# e tamb6m riamo# a fun52o prinipal main+ por6m a ria52o de fun59e#
pode #er Qtil para a4ili)ar o :di4o uma fun52o e um proedimento 8ue o ompilador pode fa)er
inQmera# .e)e# 8uando for hamado+ uma fun52o tem o# ar4umento# e o retorno a# fun59e# de.e
#er riada ante# da fun52o prinipal main ou de.e ter o prot:tipo dela ante#+ uma fun52o tamb6m
pode ter 8ual8uer nome embora #e hou.er outra fun52o om o me#mo nome .ai d; erro+ para #e ria
uma fun52o 6 a me#ma maneira 8ue riamo# a fun52o main oloamo# primeiro o tipo de retorno o
nome da fun52o o ar4umento riamo# um e#opo e dentro dele no final do :di4o u#amo# o return+
na fun52o prinipal ou em outra# fun59e# podemo# hamar ela
Oinlude ]#tdio.hW
int eof(.oid!
a
printf(^.i#ite o forum eofVn^!Z
return ,Z
b
int main(.oid!
a
eof(!Z
return ,Z
b
podemo# riar a no##a fun52o depoi# da fun52o main para i##o temo# 8ue oloar o prot:tipo dela+ o
prot:tipo ou a##inatura 6 a parte #em o e#opo da fun52o
Oinlude ]#tdio.hW
int eof(.oid!Z
int main(.oid!
a
eof(!Z
return ,Z
b
int eof(.oid!
a
printf(^.i#ite o forum eofVn^!Z
return ,Z
b
podemo# riar .ari;.ei# omo ar4umento para en.iar para fun52o e u#ar o retorn para retornar da
fun52o+ no e*emplo abai*o entramo# om um .alor ele retorna o 8uadrado do nQmero
Oinlude ]#tdio.hW
int eofi8uad(int numero!
a
return numero d numeroZ
b
int main(.oid!
a
int ft# g eofi8uad(&!Z
printf(^hd^+ft#!Z
return ,Z
b
toda# a# .ari;.ei# dentro da fun52o 6 liberada 8uando a fun52o 6 de#tru7da+ ent2o para 8ue um .alor
fi8ue em uma .ari;.el podemo# u#ar a# .ari;.ei# 4lobai#
Oinlude ]#tdio.hW
int numero/ g ,Z
.oid eof(int numero!
a
numero/ +g numeroZ
printf(^hd Vn^+numero/!Z
b
int main(.oid!
a
eof(&!Z
eof(G!Z
return ,Z
b
outra maneira 6 u#ar a# .ari;.ei# e#t;tia#
Oinlude ]#tdio.hW
.oid eof(int numero!
a
#tati int numero/ g ,Z
numero/ +g numeroZ
printf(^hd Vn^+numero/!Z
b
int main(.oid!
a
eof(&!Z
eof(G!Z
return ,Z
b
para alterar .ari;.ei# loai# de um outro e#opo podemo# riar um ponteiro na fun52o e pa##ar
omo ar4umento o endere5o de mem:ria i##o 6 hamado pa##a4em por referenia
Oinlude ]#tdio.hW
.oid eof(int dnumero!
a
dnumero g $%&Z
b
int main(.oid!
a
int ft# g ,Z
eof(Yft#!Z
printf(^hd^+ft#!Z
return ,Z
b
?ara pa##ar uma arraM omo ar4umento temo# 8ue pa##ar por referenia e ela# n2o prei#a oloar o
#7mbolo de endere5o de mem:ria
Oinlude ]#tdio.hW
.oid eof(int dnumero!
a
numero[,\ g $%&Z
b
int main(.oid!
a
int ft#[%,\Z
eof(ft#!Z
printf(^hd^+ft#[,\!Z
return ,Z
b
8uando temo# 8ue pa##ar uma #trin4 omo ar4umento podemo# riar um ponteiro do tipo har e
oloar on#t ante#+ de##a forma podemo# tanto pa##ar uma arraM omo uma #trin4 diretamente para
#er aloada
Oinlude ]#tdio.hW
.oid eof(on#t har dte*to!
a
printf(te*to!Z
b
int main(.oid!
a
eof(^.i#ite o forum eof^!Z
return ,Z
b
8uando o #i#tema aha uma hamada de fun52o ele para de e*eutar a8uele treho do odi4o e pula
para a parte da fun52o e 8uando a fun52o 6 de#tru7da ele .olta para o treho 8ue paro e ontinua a
e*eu52o e i##o dei*a o pro4rama mai# lento para e.itar i##o podemo# u#ar fun59e# inline+ e##a#
fun59e# n2o fa) o #i#tema pular para o endere5o ela# pu*a a fun52o para onde e#t; o :di4o de
hamada dela+ para u#ar fun52o inline ba#ta oloar inline ante# do tipo de retorno
Oinlude ]#tdio.hW
inline .oid eof(on#t har dte*to!
a
printf(te*to!Z
b
int main(.oid!
a
eof(^.i#ite o forum eof^!Z
return ,Z
b
a# fun59e# reur#i.a# permite hamar ela# me#ma#+ por6m de.e #e tomar uidado om um loop
infinito
Oinlude ]#tdio.hW
.oid eof(.oid!
a
printf(^funao reur#i.a Vn^!Z
eof(!Z
b
int main(.oid!
a
eof(!Z
b
para fa)er a no##a fun52o #e e*euta depoi# 8ue o pro4rama for finali)ado u#amo# a fun52o ate*it da
bibliotea #tdlib.h e pa##amo# omo ar4umento a no##a fun52o
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
.oid eof(.oid!
a
printf(^#eu pro4rama foi finali)ado^!Z
b
int main(.oid!
a
ate*it(eof!Z
return ,Z
b
:.1 Direti1as de pr>@processamento
"# direti.a# de pre proe##amento di) ao ompilador omo ele de.e ompilar o :di4o+ e##a#
direti.a# #2o a# primeira# oi#a# 8ue o ompilador hea ante# da ompila52o+ .oL pode u#ar e##a#
direti.a# para definir #e determinada parte do :di4o .ai #er ompilada apena# para um #i#tema
operaional ou impedir 8ue determinada bibliotea #e3a delarada dua# .e)e#+ e*i#tem .aria#
direti.a# uma dela# e para inluir bibliotea header 8ue u#amo# inQmera# .e)e# a Oinlude
Oinlude ]#tdio.hW
int main(.oid!
a
return ,Z
b
outra direti.a 8ue 3; u#amo# anteriormente 6 a Odefine para riar on#tante+ por6m e##a direti.a
pode #er u#ada para mai# oi#a# do 8ue #imple# on#tante#+ podemo# oloar :di4o# inteiro# na
direti.a Odefine embora muita# .e)e# pode dei*ar o :di4o muito inle47.el
Oinlude ]#tdio.hW
Odefine F@C int main(.oid! a printf(^.i#item o forum eof^!Z return ,Zb
F@C
para u#ar :di4o# de mai# de uma linha para o Odefine ou ate me#mo para #trin4# podemo# u#ar
ontra barra no final
Oinlude ]#tdio.hW
Odefine F@C V
int main(.oid! V
a V
printf(^.i#item o forum eof^!Z V
return ,Z V
b
F@C
tamb6m podemo# pa##ar ar4umento# para direti.a Odefine para i##o ba#ta oloar entre parLnte#e# e
oloar o# nome# do ar4umento 8ue #er; mudado
Oinlude ]#tdio.hW
Odefine F@C(@Ee@O! printf(@Ee@O!
int main(.oid!
a
F@C(^forum eof^!Z
return ,Z
b
outra direti.a 6 o Oif 8ue 6 bem pareida om a e#trutura ondiional if+ a diferen5a 8ue a direti.a
Oif 6 te#tado o 8ue de.e #er ompilado e a e#trutura ondiional if o 8ue de.e #er e*eutado+ a
direti.a Oif n2o tem e#opo #: um Oendif para finali)ar e pode #er u#ada em 8ual8uer parte do
odi4o
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
printf(^.i#ite o forum Vn^!Z
Oif % gg %
#M#tem(^pau#e^!Z
Oendif
return ,Z
b
podemo# oloar uma direti.a Oif dentro da outra
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
printf(^.i#ite o forum Vn^!Z
Oif % gg %
Oif % W ,
#M#tem(^pau#e^!Z
Oendif
Oendif
return ,Z
b
tamb6m podemo# u#ar um Oel#e depoi# do Oif
Oinlude ]#tdio.hW
Odefine O? ,
int main(.oid!
a
Oif O? gg %
printf(^.i#ite o forum Vn^!Z
Oel#e
printf(^bM: hft#$%&^!Z
Oendif
return ,Z
b
tamb6m e*i#te a direti.a Oifdef 8ue ompila determinada parte do :di4o #e determinada direti.a
foi delarada
Oinlude ]#tdio.hW
Odefine F@C $%&
int main(.oid!
a
Oifdef F@C
printf(^#im^!Z
Oel#e
printf(^nao^!Z
Oendif
return ,Z
b
e*i#te o opo#to da direti.a Oifdef 8ue 6 o Oifndef
Oinlude ]#tdio.hW
int main(.oid!
a
Oifdnef F@C
printf(^#im^!Z
Oel#e
printf(^nao^!Z
Oendif
return ,Z
b
para remo.er uma direti.a Odefine podemo# u#ar a direti.a Oundef
Oinlude ]#tdio.hW
Odefine F@C $%&
Oundef F@C
int main(.oid!
a
Oifdef F@C
printf(^#im^!Z
Oel#e
printf(^nao^!Z
Oendif
return ,Z
b
al6m da# direti.a# e*i#tem uma# on#tante# 8ue pode #er u#ada# 3unto om a# direti.a# omo por
e*emplo e##a# 8ue da para #aber 8ual #i#tema operaional
Oinlude ]#tdio.hW
int main(.oid!
a
Oifdef AIN$/
printf(^'indo'# *$/^!Z
Oendif
Oifdef AINGE
printf(^'indo'# *GE^!Z
Oendif
Oifdef ilinu*
printf(^linu*^!Z
Oendif
return ,Z
b
e*i#te a direti.a Oline permite o ompilador definir o nQmero da linha+ tamb6m podemo# u#ar a
on#tante iiLINEii para #aber 8ual 6 a linha atual
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^o numero de linha: hd Vn^+iiLINEii!Z
Oline ,
printf(^o numero de linha: hd Vn^+iiLINEii!Z
Oline $%&
printf(^o numero de linha: hd Vn^+iiLINEii!Z
return ,Z
b
8uando 8ueremo# 8ue a #oure n2o ompile podemo# u#ar a direti.a Oerror #e4uida de uma
men#a4em
Oinlude ]#tdio.hW
Oerror nao .ai ompilar+ bem feito eD
int main(.oid!
a
return ,Z
b
:.2 Criando +i,lioteca Aeader
3; u#amo# di.er#a# bibliotea# em no##a# #oure# a4ora .amo# aprender omo riar ela# para poder
reapro.eitar o :di4o+ para riar uma bibliotea header 6 muito fail ba#ta riar um ar8ui.o om
e*ten#2o .h (no meu a#o riei um hamado endoffile.h!+ e##e ar8ui.o de.e fiar ou na pa#ta inlude
3unto om a# outra# bibliotea# do ompilador (no meu a#o ela fia JC:VDe.>CppVinludeK! ou na
pa#ta 3unto om a #oure+ omo foi dito em Jbibliotea# da lin4ua4em C/C++K #e o ar8ui.o
bibliotea e#ti.er 3unto a #oure de.e inluir om a#pa# dupla# e #e ti.er na pa#ta inlude de.e
inluir om abre e feha menor e maior
Oinlude ^endoffile.h^ //bibliotea na pa#ta da #oure
Oinlude ]endoffile.hW //bibliotea na pa#ta do ompilador
int main(.oid!
a
return ,Z
b
a# bibliotea# header #: nee##ita riar a# fun59e# para funionar+ por6m 6 bom hear #e o ar8ui.o
3; n2o foi inlu#o para i##o u#amo# dua# direti.a# 8ue #2o a Oifndef e Odefine+ 6 omum u#ar omo
ar4umento para Oifndef e Odefine o nome da bibliotea entre dua# .e)e# underline
Oifndef iiENDOFFILEiIii
Odefine iiENDOFFILEiIii
Oendif
#empre 8ue riar uma fun52o olo8ue o prot:tipo dela tamb6m
Oifndef iiENDOFFILEiIii
Odefine iiENDOFFILEiIii
int eofi8uad(int numero!Z
int eofiubo(int numero!Z
int eofi8uad(int numero!
a
return numero d numeroZ
b
int eofiubo(int numero!
a
return numero d numero d numeroZ
b
Oendif
podemo# riar bibliotea para arre4ar outra# bibliotea# 6 uma forma de failitar e n2o prei#ar
fiar delarando .;ria# bibliotea#
Oifndef iiENDOFFILEiIii
Odefine iiENDOFFILEiIii
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]#tdbool.hW
Oinlude ]#trin4.hW
Oendif
8uando e#tamo# ompilando pelo 4 e temo# 8ue inluir um diretorio 8ue tem a# bibliotea#
u#amo# a #inta*e >I #e4uido do endere5o do diretorio
ft#$%&-#kMnet:`/De#ktopX 4 ft#. >o hak.o >I ^/home/ft#$%&/De#ktop/bibliotea#^
:.! Criando +i,lioteca sttica e LI+
a# bibliotea e#t;tia #2o ompilada# 3unto om ar8ui.o ob3eto 4erando o e*euta.el final+ para
riar o ar8ui.o ob3eto e n2o o e*euta.el ba#ta adiionar a #inta*e de omando > no ompilador
4 ou na# op52o de ompila52o da IDE
ft#$%&-#kMnet:`/De#ktopX 4 ft#. >o hak.o >
poder7amo# u#ar ar8ui.o# ob3eto# omo bibliotea+ um e*emplo ba#io #eria e##a om apena# uma
fun52o
Oifndef iiI"CRiODPii
Odefine iiI"CRiODPii
int ft#(int *!
a
return * d *Z
b
Oendif
depoi# de 4erar o ob3eto poder7amo# u#ar e##e ar8ui.o ob3eto 3unto a 8ual8uer outra #oure para
poder u#ar a# fun52o nela+ porem na hora de ompilar ba#ta ompilar 3unto
ft#$%&-#kMnet:`/De#ktopX 4 lol. hak.o >o eof
tambem poderia oloar o prototipo dela dentro da# #oure#+ para fa)er i##o ter7amo# 8ue oloar o
identifiador e*tern ante#
Oinlude ]#tdio.hW
e*tern int ft#(int *!Z
int main(.oid!
a
printf(^hd^+ft#(&!!Z
return ,Z
b
o# lib# #2o pareido om ar8ui.o ob3eto #: 6 inlu7do na hora da ompila52o ele# #2o uma e#p6ime
de ompata52o de ar8ui.o# ob3eto#+ para #e riar um lib temo# 8ue riar um ar8ui.o ob3eto ante#
no a#o .ou u#ar o hak.o 8ue eu 3; tinha riado+ depoi# u#amo# o pro4rama ar 8ue pro.a.elmente
.em 3unto om #eu ompilador+ ne##e pro4rama u#amo# a #inta*e Jar ruK #e4uido do nome do
ar8ui.o lib a #er riado (de.e ter e*ten#ao .a! e depoi# o# ar8ui.o# ob3eto#
ft#$%&-#kMnet:`/De#ktopX ar ru ft#.a hak.o
na ompila52o do 4 de.e inluir a #inta*e >L #e4uido do diretorio 8ue e#ta o ar8ui.o lib e a
#inta*e >l #e4uido do ar8ui.o lib
ft#$%&-#kMnet:`/De#ktopX 4 lol. >o hak >L ^/home/ft#$%&/De#ktop^ >l ft#.a
para .i#uali)ar o# ar8ui.o# ob3eto# dentro de um lib podemo# u#ar a #inta*e Jar tK #e4uido do
ar8ui.o ob3eto
ft#$%&-#kMnet:`/De#ktopX ar t ft#.a
hak.o
ft#$%&-#kMnet:`/De#ktopX
:.- Criando +i,lioteca Din9mica /DLL e *?0
"# bibliotea# dinamia# #2o arre4ada# em tempo de e*eu52o (run>time! diferente da# e#tatia#
8ue #2o ompilada# 3unto om e*euta.el 4erando o e*euta.el final+ a .anta4em da# bibliotea#
dinamia# 8ue o e*euta.el fia menor e pode 4a#tar meno# memoria a de#.anta4em 8ue #e faltar a
bibliotea o pro4rama pode n2o funionar+ a# bibliotea# dinamia# u#ada no #i#tema 'indo'# #2o
a# dll boa parte da# "?I do #i#tema operaional e#ta dentro de al4uma dll ou pelo meno# o#
prot:tipo dela+ e a maioria da# dll e#ta no diretorio 'indo'#V#M#tem$/ e##e diretorio tambem 6
on#iderado o inferno de dll de.ido a 8uantidade de dll 8uem tem nele+ para riar uma dll no
#i#tema 'indo'# u#amo# a# "?I# do #i#tema operaional e tamb6m u#amo# a #inta*e >>#hared do
4+ em uma dll n2o u#amo# a fun52o prinipal main e #im DllBain 8ue tem um retorno do tipo
DOOL "?IEN@N_+ o# ar4umento# dela #2o $ .aria.ei# do tipo IINC@"NCE+ DAOND e L?FOID+
e a fun52o tem um retorno @N<E+ tamb6m 6 nee##;rio inluir a bibliotea 'indo'#.h para pode
u#ar a# "?I# itada#
Oinlude ]'indo'#.hW
DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.!
a
return @N<EZ
b
omo dito ante# para ompilar 6 nee##;rio u#ar a #inta*e >>#hared no 4
C:V<#er#Vft#$%&VDe#ktopW 4 ft#. >o ft#.dll >>#hared
a8uela dll n2o tem nenhuma fun52o ent2o tambem n2o tem nehuma utilidade para noi#
pro4ramadore#+ para riar uma fun52o 8ue #era e*portada+ ou #e3a #er; ae##ada pelo# pro4rama#
8ue arre4ar a8uela dll+ temo# 8ue oloar um prototipo da fun52o e no prototipo temo# 8ue oloar
iidel#pe(dlle*port! no ome5o do prototipo i##o permite a fun52o #er e*portada
Oinlude ]'indo'#.hW
iidel#pe(dlle*port! int ft#i8uad(int .alor!Z
DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.!
a
return @N<EZ
b
int ft#i8uad(int .alor!
a
return .alor d .alorZ
b
no e#opo da DllBain podemo# u#ar fun5oe# 8ue #era e*eutada a##im 8ue a dll for arre4ada #em
prei#ar #er hamada a# fun5oe# (#eria um autorun+ uidado om a# fun5oe# hamada# ali por8ue #e
n2o fi)er um hea4em ade8uada pode fiar em loop infinito!
Oinlude ]'indo'#.hW
Oinlude ]#tdio.hW
iidel#pe(dlle*port! int ft#i8uad(int .alor!Z
DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.!
a
FILE dar8 g fopen(^ft#.t*t^+^'^!Z
fprintf(ar8+^lol #ou otaku+ urto rok+ fao pro4rama e #ou .iiado em afeinaVn^!Z
return @N<EZ
b
int ft#i8uad(int .alor!
a
return .alor d .alorZ
b
omo dito ante# podemo# fa)er uma hea4em para i##o u#amo# a# on#tante#
DLLi?NOCECCi"@@"CI e##a on#tante retorna .erdadeiro 8uando a dll for arre4ada+ e a
on#tante DLLi?NOCECCiDE@"CI 8uando ela for liberada
Oinlude ]'indo'#.hW
Oinlude ]#tdio.hW
iidel#pe(dlle*port! int ft#i8uad(int .alor!Z
DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.!
a
if(DLLi?NOCECCi"@@"CI!
a

b
el#e if(DLLi?NOCECCiDE@"CI!
a
b
return @N<EZ
b
int ft#i8uad(int .alor!
a
return .alor d .alorZ
b
podemo# e*eutar fun59e# dentro de uma dll om um pro4rama do 'indo'# hamado rundll$/ a
#inta*e dele 6 a dll uma .7r4ula e o nQmero da dll (ordem! ou nome dela
C:V<#er#Vft#$%&VDe#ktopW rundll$/ ft#.dll+ft#i8uad
para arre4ar uma dll na lin4ua4em C/C++ temo# 8ue u#ar a "?I LoadLibrarM e pa##ar omo
ar4umento a dll+ e para libera>la ela podemo# u#ar o FreeLibrarM #e4uido da .aria.el do tipo
IINC@"NCE 8ue tinha atribu7do a dll
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
IINC@"NCE dllZ
dll g LoadLibrarM(^ft#.dll^!Z
FreeLibrarM(dll!Z
return ,Z
b
#: arre4ar a dll n2o 6 #ufiiente para u#ar a# fun59e# dentro dela+ para fa)er i##o temo# 8ue riar
um tipo om o prototipo i4ual ao da fun52o e depoi# arre4ar ela pelo endere5o+ para riar o
prototipo u#amo# tMpedef oloamo# o tipo de retorno da fun52o abrimo# e fehamo# parLnte#e# e la
dentro oloamo# um ponteiro om um nome 8ual8uer+ depoi# abrimo# e fehamo# parLnte#e# de
no.o e oloamo# o# tipo# do# ar4umento# #eparado# por .ir4ula a#o tenha mai# de um+ e depoi#
in#taniamo# e##e tipo
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
tMpedef int (dfun!(int!Z
int main(.oid!
a
fun eofZ
IINC@"NCE dllZ
dll g LoadLibrarM(^ft#.dll^!Z
FreeLibrarM(dll!Z
return ,Z
b
a4ora #: falta pe4ar o endere5o e atribuir ele para o tipo+ para pe4ar o tipo u#amo# a "?I
(et?ro"ddre## pa##amo# omo ar4umento para ela a .aria.el 8ue e#ta atribuida a dll+ e uma #trin4
8ue #eria o nome da fun52o+ depoi# atribuimo# a fun52o (et?ro"ddre## para a in#t=nia do tipo
8ue t7nhamo# riado (u#amo# tMpe#a#t do tipo para on.eter #em erro#!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
tMpedef int (dfun!(int!Z
int main(.oid!
a
fun eofZ
IINC@"NCE dllZ
dll g LoadLibrarM(^ft#.dll^!Z
eof g (fun! (et?ro"ddre##(dll+^ft#i8uad^!Z
FreeLibrarM(dll!Z
return ,Z
b
para terminar #: a 4ente manipular a in#tania da8uele tipo 8ue riamo# omo #e fo##e a pr:pria
fun52o da dll
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
tMpedef int (dfun!(int!Z
int main(.oid!
a
int .alorZ
fun eofZ
IINC@"NCE dllZ
dll g LoadLibrarM(^ft#.dll^!Z
eof g (fun! (et?ro"ddre##(dll+^ft#i8uad^!Z
.alor g eof(&!Z
printf(^hd^+.alor!Z
FreeLibrarM(dll!Z
return ,Z
b
tambem 6 po##7.el riar bibliotea din=mia no linu* 8ue #2o o# ar8ui.o# CO+ a #inta*e para riar
e##e ar8ui.o 6 mai# fail do 8ue a# dll 'indo'#+ para riar e##e# ar8ui.o# CO podemo# riar a#
fun5oe# normai# n2o prei#ar oloar nenhuma fun52o DllBain i4ual a# dll do 'indo'#
int ft#i8uad(int .alor!
a
return .alor d .alorZ
b
na hora de ompilar tambem temo# 8ue oloar a #inta*e >>#hared no 4
ft#$%&-#kMnet:`/De#ktopX 4 bibliotea. >o ft#.#o >>#hared
para arre4ar o ar8ui.o u#amo# a "?I dlopen da bibliotea dlfn.h+ pa##amo# omo ar4umento para
e##a "?I o ar8ui.o CO e omo ele #era aberto (podemo# oloar a on#tante N@LDiL"n_!+ e
atribuimo# tudo a um ponteiro do tipo .oid
Oinlude ]#tdio.hW
Oinlude ]dlfn.hW
int main(.oid!
a
.oid ddlZ
dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z
return ,Z
b
?odemo# liberar o ar8ui.o om a "?I dllo#e o# ar4umento# dela 6 a .aria.el do tipo .oid
Oinlude ]#tdio.hW
Oinlude ]dlfn.hW
int main(.oid!
a
.oid ddlZ
dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z
dllo#e(dl!Z
return ,Z
b
a4ora riamo# um prot:tipo para i##o oloamo# o tipo de retorno abre e feha parLnte#e# um
ponteiro om 8ual8uer nome la dentro+ abre e feha parLnte#e# o# ar4umento#
Oinlude ]#tdio.hW
Oinlude ]dlfn.hW
int main(.oid!
a
.oid ddlZ
int (dft#!(int numero!Z
dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z
dllo#e(dl!Z
return ,Z
b
a4ora u#amo# a "?I dl#Mm pa##amo# omo ar4umento para ela a .aria.el 8ue e#ta arma)enada o
ar8ui. CO+ e o nome da fun52o
Oinlude ]#tdio.hW
Oinlude ]dlfn.hW
int main(.oid!
a
.oid ddlZ
int (dft#!(int numero!Z
dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z
ft# g dl#Mm(dl+^ft#i8uad^!Z
dllo#e(dl!Z
return ,Z
b
depoi# #: u#ar a8uele tipo omo #e fo##e a fun52o
Oinlude ]#tdio.hW
Oinlude ]dlfn.hW
int main(.oid!
a
.oid ddlZ
int (dft#!(int numero!Z
int eofZ
dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z
ft# g dl#Mm(dl+^ft#i8uad^!Z
eof g (dft#!(%,!Z
printf(^hd^+eof!Z
dllo#e(dl!Z
return ,Z
b
para ompilar e nee##;rio linkar a lib dl 3unto om o 4
ft#$%&-#kMnet:`/De#ktopX 4 ft#. >o hak >l dl
:.7 Criando )aBe"ile
O# make file# ou ar8ui.o# de ria52o #2o ar8ui.o# para failitar a ompila52o de determinada
#oure e.itando do pro4ramador ou u#u;rio final ter 8ue di4itar todo# o# paramento# para poder
ompilar+ e##e# ar8ui.o# #2o u#ado on#tantemente no linu* para in#talar paote#+ o# make file#
permite u#ar .aria.ei# e ao me#mo tempo fa) hea4em do# paramento#+ o# ar8ui.o# make file de.e
e#tar e#rito por padr2o JBakefileK a#o n2o e#te3a temo# 8ue e#peifiar uma #inta*e para inluir o
ar8ui.o+ o pro4rama 8ue 6 u#ado para ompilar pelo# ar8ui.o# make file 6 o make 8ue o#tuma .im
3unto om o# ompiladore#+ o# ar8ui.o# make u#a a #e4uinte e#trutura 8ue 6 o nome do paramento
#e4uido de doi# ponto# e o# ar8ui.o# de hea4em depoi# uma 8uebra de linha e uma tabula52o e o
omando u#ado pelo terminal
ar8ui.o: ft#.
4 ft#. >o hak
para ompilar ba#ta ahar o ar8ui.o pelo prompt e di4itar make
ft#$%&-#kMnet:`/De#ktopX make
4 ft#. >o hak
ft#$%&-#kMnet:`/De#ktopX
a#o o ar8ui.o n2o e*i#ti>#e ele n2o ia ompilar
ft#$%&-#kMnet:`/De#ktopX make
make: ddd Cem re4ra para proe##ar o al.o oft#.U+ nee##;rio por oar8ui.oU. ?are.
ft#$%&-#kMnet:`/De#ktopX
a#o o ar8ui.o make e#ti.er om outro nome temo# 8ue u#ar a #inta*e >f #e4uido do nome do
ar8ui.o
ft#$%&-#kMnet:`/De#ktopX make >f lol
4 ft#. >o hak
ft#$%&-#kMnet:`/De#ktopX
podemo# omentar o# make file# om #harp# (O!
ObM hft#$%&
ar8ui.o: ft#.
4 ft#. >o hak
6 po##7.el riar no.o# paramento# para i##o na hea4em oloamo# o nome do no.o paramento+ o
no.o paramento #era e*eutado ante# do anterior e o anterior #era e*eutado apena# #e der erto o
outro
ar8ui.o: ft#. ob3eto
4 ft#. lol.o >o hak
ob3eto: lol.o
4 ob3eto. >o lol.o >
tamb6m 6 po##7.el riar .ari;.ei# para i##o ba#ta e#re.er o nome da .ari;.el depoi# u#ar i4ual
#e4uido do .alor+ para u#ar a# .ari;.ei# u#amo# ifr2o #e4uido de abre e feha parLnte#e# dentro
dele o nome da .ari;.el
ompiladorg4
#ouregft#.
#aidaghak
ar8ui.o: X(#oure!
X(ompilador! X(#oure! >o X(#aida!
podemo# entrar om o .alor para a# .aria.el om a #inta*e >e #e4uido da# .aria.ei# e .alore#
ft#$%&-#kMnet:`/De#ktopX make >e ompiladorg4++ #aidaghft#
4++ ft#. >o hft#
ft#$%&-#kMnet:`/De#ktopX
;.0 struturas
"# e#trutura# #2o meio# de arma)enamento de dado# do me#mo tipo ou de tipo# diferente#+ uma da#
e#trutura# mai# u#ada# na lin4ua4em C 6 o #trut+ para riar uma e#trutura #trut temo# 8ue oloar a
pala.ra #trut #e4uida do nome dela 8ue pode #er 8ual8uer um+ depoi# riamo# um e#opo para
oloar o# tipo de dado# e .ari;.ei#+ depoi# do e#opo prei#amo# finali)ar om um ponto e .7r4ula
Oinlude ]#tdio.hW
#trut eof
a
bZ
int main(.oid!
a
return ,Z
b
a4ora #: oloarmo# a# .ar;.ei# dentro da e#trutura
Oinlude ]#tdio.hW
#trut eof
a
int diaZ
int me#Z
int anoZ
bZ
int main(.oid!
a
return ,Z
b
depoi# de riar a e#trutura temo# 8ue in#taniar (delarar! ela na fun52o para poder u#ar+ ada
in#t=nia riada n2o afeta a outra+ para in#taniar uma e#trutura na fun52o oloamo# a pala.ra
#trut #e4uido do nome da e#trutura 8ue .amo# in#taniar e o nome da in#t=nia 8ue pode #er
8ual8uer um
Oinlude ]#tdio.hW
#trut eof
a
int diaZ
int me#Z
int anoZ
bZ
int main(.oid!
a
#trut eof ft#Z
return ,Z
b
om a e#trutura riada e in#taniada ba#ta ae##ar a# .ari;.ei# dentro dela+ para i##o u#amo# o nome
da in#t=nia #e4uido de um ponto e nome da .ari;.el depoi# podemo# atribuir omo #e fo##e uma
.ari;.el me#mo
Oinlude ]#tdio.hW
#trut eof
a
int diaZ
int me#Z
int anoZ
bZ
int main(.oid!
a
#trut eof ft#Z
ft#.dia g %/Z
ft#.me# g %,Z
ft#.ano g /,%$Z
printf(^hd/hd/hd^+ft#.dia+ft#.me#+ft#.ano!Z
return ,Z
b
omo dito ante# ada in#t=nia n2o afeta a outra
Oinlude ]#tdio.hW
#trut eof
a
int numeroZ
bZ
int main(.oid!
a
#trut eof ft#Z
#trut eof lolZ
ft#.numero g $%&Z
lol.numero g %,,Z
printf(^hd Vnhd^+ft#.numero+lol.numero!Z
return ,Z
b
podemo# delarar u#ando a me#ma linha #eparando por .7r4ula 8uando 6 a me#ma e#trutura#
Oinlude ]#tdio.hW
#trut eof
a
int numeroZ
bZ
int main(.oid!
a
#trut eof ft#+lolZ
ft#.numero g $%&Z
lol.numero g %,,Z
printf(^hd Vnhd^+ft#.numero+lol.numero!Z
return ,Z
b
podemo# delarar e#trutura# omo ponteiro# adiionando a#teri#o ante# do nome da in#t=nia+ na
hora de ae##ar o# dado# n2o u#amo# o ponto e #im o h7fen #e4uido do maior (>W!
Oinlude ]#tdio.hW
#trut eof
a
int numeroZ
bZ
int main(.oid!
a
#trut eof dft#Z
ft#>Wnumero g $%&Z
printf(^hd^+ft#>Wnumero!Z
return ,Z
b
tamb6m e po##7.el pa##ar omo ar4umento o endere5o de mem:ria de uma e#trutura para uma
fun52o para poder #er manipulada
Oinlude ]#tdio.hW
#trut eof
a
int numeroZ
bZ
.oid lol(#trut eof dponteiro!
a
ponteiro>Wnumero g $%&Z
b
int main(.oid!
a
#trut eof ft#Z
lol(Yft#!Z
printf(^hd^+ft#.numero!Z
return ,Z
b
poder7amo# riar uma delara52o 4lobal u#ando tMpedef ante# do #trut+ e ante# do ponto e .7r4ula
o# nome# predefinido# da #trut #eparado por .7r4ula+ de##a forma na hora de delarar podemo#
delarar #em a pala.ra #trut
Oinlude ]#tdio.hW
tMpedef #trut eof
a
int numeroZ
blolZ
int main(.oid!
a
lol ft#Z
ft#.numero g $%&Z
printf(^hd^+ft#.numero!Z
return ,Z
b
outra forma #eria riar o tMpedef #eparadamente
Oinlude ]#tdio.hW
tMpedef #trut eof lolZ
#trut eof
a
int numeroZ
bZ
int main(.oid!
a
lol ft#Z
ft#.numero g $%&Z
printf(^hd^+ft#.numero!Z
return ,Z
b
tamb6m podemo# aloar dinamiamente pelo mallo
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
#trut eof
a
int numeroZ
bZ
int main(.oid!
a
#trut eof dft# g mallo(#i)eof(#trut eof!!Z
ft#>Wnumero g $%&Z
printf(^hd^+ft#>Wnumero!Z
free(ft#!Z
return ,Z
b
e*i#tem outra# e#trutura# al6m da #trut uma dela# 6 o enum 8ue #er.e para enumerar on#tante#
om nQmero# on#euti.o# (,+%+/+$+E et!+ para riar a e#trutura enum ba#ta u#ar o nome dela riar
um e#opo e oloar o nome da# on#tante# #eparado por .7r4ula+ e para terminar um ponto e
.ir4ula depoi# do e#opo+ o ontador ome5a no numero , e a pr:*ima on#tante #era o numero
anterior inrementado mai# %
Oinlude ]#tdio.hW
enum
a
F@C+ BBeB+ CINiN"FIC+ C<C?EI@OiFIN@<"L
bZ
int main(.oid!
a
printf(^hd hd hd hd^+F@C+BBeB+CINiN"FIC+C<C?EI@OiFIN@<"L!Z
return ,Z
b
para e#peifiar um nQmero de uma on#tante ba#ta atribuir o nQmero a ela+ #: lembrando 8ue a
pr:*ima #er; um inremento da anterior
Oinlude ]#tdio.hW
enum
a
F@C g $%&+ BBeB+ CINiN"FIC+ C<C?EI@OiFIN@<"L
bZ
int main(.oid!
a
printf(^hd hd hd hd^+F@C+BBeB+CINiN"FIC+C<C?EI@OiFIN@<"L!Z
return ,Z
b
outra e#trutura tamb6m da lin4ua4em C 6 o union 8ue permite uma aloa52o tenha mai# de um tipo
de dado embora e##a aloa52o #: po##a 4uardar um .alor por .e)
Oinlude ]#tdio.hW
union eof
a
int ft#Z
float lolZ
bZ
int main(.oid!
a
union eof hakZ
hak.ft# g $%&Z
hak.lol g $.%&Z
printf(^hd Vnhd^+Yhak.ft#+Yhak.lol!Z
b
uma e#trutura da lin4ua4em C++ 6 o name#pae 8ue permite #eparar o :di4o e.itando .ari;.ei#
fun59e# e e#trutura# om o me#mo nome o name#pae mai# u#ada na lin4ua4em C++ 6 o #td onde
e*i#te a# fun59e# out+ in e endl+ para riar um name#pae ba#ta oloar a pala.ra name#pae
#e4uida do nome dele 8ue pode #er 8ual8uer um+ depoi# um e#opo e la dentro a# .ari;.ei# e
fun59e#
Oinlude ]io#treamW
name#pae eof
a
int ft#Z
bZ
int main(.oid!
a
return ,Z
b
para ae##ar o# dado# dentro do name#pae u#amo# o nome do name#pae #e4uida de dua# .e)e#
doi# ponto# e a .ari;.el ou fun52o
Oinlude ]io#treamW
name#pae eof
a
int ft#Z
bZ
int main(.oid!
a
eof::ft# g $%&Z
#td::out ]] eof::ft#Z
return ,Z
b
omo dito ante# o name#pae permite oloar .ari;.ei# om o me#mo nome e.itando
inompatibilidade
Oinlude ]io#treamW
name#pae eof
a
int ft#Z
bZ
name#pae hak
a
int ft#Z
bZ
int main(.oid!
a
eof::ft# g $%&Z
hak::ft# g %,,Z
#td::out ]] eof::ft# ]] #td::endlZ
#td::out ]] hak::ft#Z
return ,Z
b
para e.itar n2o fiar oloando o name#pae podemo# indiar 8ue determinada fun52o ou .ari;.el
pertene a8uele name#pae+ para i##o u#amo# a pala.ra u#in4 #e4uido dele e a .aria.el ou fun52o
(lembrando 8ue para fa)er i##o tem 8ue riar primeiro o name#pae!
Oinlude ]io#treamW
u#in4 #td::outZ
u#in4 #td::endlZ
name#pae eof
a
int ft#Z
bZ
u#in4 eof::ft#Z
int main(.oid!
a
ft# g $%&Z
out ]] ft#Z
return ,Z
b
para fa)er i##o om toda# a# fun59e# e .ari;.ei# do name#pae podemo# u#ar Ju#in4 name#paeK e o
nome do name#pae
Oinlude ]io#treamW
u#in4 name#pae #tdZ
name#pae eof
a
int ft#Z
bZ
u#in4 name#pae eofZ
int main(.oid!
a
ft# g $%&Z
out ]] ft#Z
return ,Z
b
tamb6m podemo# oloar um name#pae dentro de outro
Oinlude ]io#treamW
u#in4 name#pae #tdZ
name#pae eof
a
name#pae ft#
a
int hakZ
bZ
bZ
int main(.oid!
a
eof::ft#::hak g $%&Z
out ]] eof::ft#::hakZ
return ,Z
b
no u#in4 fiaria a##im
Oinlude ]io#treamW
u#in4 name#pae #tdZ
name#pae eof
a
name#pae ft#
a
int hakZ
bZ
bZ
u#in4 name#pae eof::ft#Z
int main(.oid!
a
hak g $%&Z
out ]] hakZ
return ,Z
b
outra e#trutura da lin4ua4em C++ #2o a# la##e# 8ue .amo# .er mai# para frente em orienta52o a
ob3eto
;.1 Con1erso de tipo e dados
E*i#tem .;rio# tipo# de on.er#2o uma dela# 6 o tMpea#t+ e##e tipo de on.er#ao permite on.erter
um tipo de dado para outro tipo de dado um e*emplo 6 int para har+ em teoria o tMpea#t pode #er
uma #imple# atribui52o
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g 10Z
har ft# g eofZ
printf(^h^+ft#!Z
return ,Z
b
embora o :di4o anterior .ai funiona #eria mai# orreto e#peifiar a on.er#2o u#ando abre e
feha parLnte#e# e o tipo de dado a #er on.ertido ante# da .ari;.el
Oinlude ]#tdio.hW
int main(.oid!
a
int eof g 10Z
har ft# g (har! eofZ
printf(^h^+ft#!Z
return ,Z
b
outra on.er#2o intere##ante 6 tran#formar uma #trin4 em numero int om a fun52o atoi da
bibliotea #tdlib.h+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento a #trin4 e pe4a o retorno do
numero on.ertido
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
har eof[%,\ g ^$%&^Z
int ft# g atoi(eof!Z
printf(^hd^+ft#!Z
return ,Z
b
para on.erte para um nQmero float u#amo# a fun52o atof da bibliotea #tdlib.h
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
har eof[%,\ g ^$.%&^Z
float ft# g atof(eof!Z
printf(^hf^+ft#!Z
return ,Z
b
e*i#te a fun52o itoa da bibliotea #tdlib.h 8ue on.erte uma .ari;.el int para uma #trin4 #obre uma
ba#e e#peifia+ para u#ar e##a fun52o pa##amo# omo ar4umento o nQmero a #er on.ertido+ a arraM
do tipo har e por fim a ba#e (%, g deimal+ %G g he*adeimal+ H g otal+ / g binario!
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
har eof[%,\Z
int ft# g $%&Z
itoa(ft#+eof+/!Z
printf(^h#^+eof!Z
return ,Z
b
a fun52o atoi n2o permite al4un# formato# de nQmero# omo por e*emplo he*adeimal para i##o
u#amo# a fun52o #trtol da bibliotea #tdlib.h+ para u#ar ele pa##amo# omo ar4umento a #trin4+ um
endere5o de mem:ria de um ponteiro do tipo har 8ue podemo# oloar N<LL (N<LL g ,! e a ba#e
do nQmero da #trin4+ o retorno da fun52o 6 o nQmero on.ertido
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
har eof[%,\ g ^,*G%^Z
int ft# g #trtol(eof+N<LL+%G!Z
printf(^hd^+ft#!Z
return ,Z
b
onde oloamo# N<LL poder7amo# e#peifiar um ponteiro+ e##e ponteiro #eria Qtil a#o ti.e##e
outro# nQmero# na #trin4
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
har eof[%&\ g ^,*G% %%,,,,%^Z
har dponteiroZ
int ft# g #trtol(eof+Yponteiro+%G!Z
printf(^,*G% g hd Vn^+ft#!Z
ft# g #trtol(ponteiro+Yponteiro+/!Z
printf(^%%,,,,% g hd^+ft#!Z
return ,Z
b
;.2 )anipulando o tempo
Dom 4alera 6 muito Qtil aprender a manipular o tempo i##o permite fa)er pro4rama# 8ue #: e*eute
determinado# proedimento# em um erto tempo ou em um inter.alo de tempo ou #imple#mente
mo#tre a hora atual+ a hora no omputador 6 re4i#trado a ada #e4undo dei# de %10, i##o permite
formatar o hor;rio onforme re4ra# do (B@ e n2o #e limitar apena# a um fu#o hor;rio ou tempo+ a
primeira fun52o 8ue .amo# .er .ai #er o #leep da bibliotea #tdlib.h+ e##a fun52o permite pau#ar o
pro4rama por um determinado tempo+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento o tempo
em #e4undo# ou mil6#imo# 8ue pode .ariar entre o #i#tema operaional (o #i#tema 'indo'# o .alor
6 em mil6#imo# 3; no linu* o .alor 6 em #e4undo#+ ent2o % #e4undo no 'indo'# pelo #leep 6
e8ui.alente a %,,, 3; no linu* % #e4undo 6 %!
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
printf(^.i#item o ^!Z
#leep(%,,,!Z
printf(^forum eof^!Z
return ,Z
b
no linu* o pro4rama anterior fiaria a##im
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
printf(^.i#item o ^!Z
#leep(%!Z
printf(^forum eof^!Z
return ,Z
b
a fun52o time da bibliotea time.h retorna o #e4undo# dei# de %10,+ para u#ar e##a fun52o ba#ta
pa##ar omo ar4umento o .alor N<LL e atribuir o retorno 8ue 6 o tempo+ embora po##amo# u#ar
.ari;.ei# do tipo int 6 reomendado u#ar a .ari;.el do tipo timeit 8ue #e enontra na bibliotea
time.h tamb6m
Oinlude ]#tdio.hW
Oinlude ]time.hW
int main(.oid!
a
timeit eof g time(N<LL!Z
printf(^hd^+eof!Z
return ,Z
b
na fun52o time tamb6m 6 po##7.el pa##ar omo ar4umento o endere5o de mem:ria da .ari;.el em
.e) de atribuir a me#ma
Oinlude ]#tdio.hW
Oinlude ]time.hW
int main(.oid!
a
timeit eofZ
time(Yeof!Z
printf(^hd^+eof!Z
return ,Z
b
uma forma de formatar o tempo para #trin4 no formato (o nome do dia+ o nome do mL#+ a data+ a
hora e o ano! podemo# u#ar a fun52o time da bibliotea time.h+ pa##amo# omo ar4umento para ela
o endere5o de mem:ria da .ari;.el timeit om o tempo
Oinlude ]#tdio.hW
Oinlude ]time.hW
int main(.oid!
a
timeit eof g time(N<LL!Z
printf(^h#^+time(Yeof!!Z
return ,Z
b
outra forma #eria u#ar a e#trutura tm da bibliotea time.h+ para i##o riamo# um ponteiro da e#trutura
tm e atribu7mo# a fun52o loaltime da bibliotea time.h+ na fun52o loaltime pa##amo# omo
ar4umento o endere5o de mem:ria da .ari;.el timeit om o tempo em #e4undo#+ depoi# ba#ta
ae##ar a# .ari;.ei# da e#trutura tm 8ue #2o tmi#e para o# #e4undo#+ tmimin para o# minuto#+
tmihour para a# hora#+ tmimdaM para o dia onforme o mL#+ tmiMdaM para o dia onforme o ano+
tmimon para o mL#+ tmi'daM para o dia da #emana+ tmiMear para o ano
Oinlude ]#tdio.hW
Oinlude ]time.hW
int main(.oid!
a
#trut tm dft#Z
timeit eof g time(N<LL!Z
ft# g loaltime(Yeof!Z
printf(^#e4undo# hd Vn^+ft#>Wtmi#e!Z
printf(^minuto# hd Vn^+ft#>Wtmimin!Z
printf(^hora hd Vn^+ft#>Wtmihour!Z
printf(^dia(#emana! hd Vn^+ft#>Wtmi'daM!Z
printf(^dia(me#! hd Vn^+ft#>WtmimdaM!Z
printf(^dia(ano! hd Vn^+ft#>WtmiMdaM!Z
printf(^me# hd Vn^+ft#>Wtmimon!Z
printf(^ano hd Vn^+ft#>WtmiMear!Z
return ,Z
b
a fun52o loaltime retorna om ba#e no hor;rio do #eu omputador para retorna o horario atual
(B@+, para manipular outro# fu#o hor;rio# u#amo# a fun52o 4mtime da bibliotea time.h no lu4ar
de loaltime e #omamo# ou #ubtra7mo# a hora onforme o (B@ de#e3ado+ no e*emplo abai*o
podemo# .er o fu#o hor;rio 4reen'ih ((B@,!+ bra#il ((@B>/+(@B>$ e (@B>E! e 3apao
((B@+1+ adoro a# 3apone#a# d>d!
Oinlude ]#tdio.hW
Oinlude ]time.hW
int main(.oid!
a
#trut tm dft#Z
timeit eof g time(N<LL!Z
ft# g 4mtime(Yeof!Z
printf(^(B@, (4reen'ih!: hd:hd:hd Vn^+ft#>Wtmihour+ft#>Wtmimin+ft#>Wtmi#e!Z
printf(^(B@>/ (are!: hd:hd:hd Vn^+ft#>Wtmihour>/+ft#>Wtmimin+ft#>Wtmi#e!Z
printf(^(B@>$ (r3!: hd:hd:hd Vn^+ft#>Wtmihour>$+ft#>Wtmimin+ft#>Wtmi#e!Z
printf(^(B@>E (f. noronha!: hd:hd:hd Vn^+ft#>Wtmihour>/+ft#>Wtmimin+ft#>Wtmi#e!Z
printf(^(B@+1 (3apao!: hd:hd:hd Vn^+ft#>Wtmihour+1+ft#>Wtmimin+ft#>Wtmi#e!Z
return ,Z
b
podemo# u#ar a fun52o difftime para retorna a diferen5a entre doi# tempo#+ pe4amo# o tempo iniial
e o final om a fun52o time+ depoi# u#amo# a fun52o difftime pa##amo# omo ar4umento o# doi# e
atribuindo o me#mo a uma .ari;.el do tipo timeit
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]time.hW
int main(.oid!
a
timeit eof+ ft#+ hakZ
eof g time(N<LL!Z
#leep($,,,!Z
ft# g time(N<LL!Z
hak g difftime(ft#+eof!Z
printf(^hd^+hak!Z
return ,Z
b
uma outra fun52o intere##ante 6 o rand e #rand da bibliotea #tdlib.h 8ue retorna nQmero# aleat:rio#+
embora n2o #e3a uma maneira de manipular o tempo para u#ar e##a# fun59e# prei#a u#ar a fun52o
time+ para retorna numero aleat:rio# u#amo# a fun52o #rand e pa##amo# omo ar4umento a fun52o
time+ depoi# u#amo# a fun52o rand om modulo e um nQmero 8ue #eria o .alor m;*imo a #er
retornado
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]time.hW
int main(.oid!
a
#rand(time(N<LL!!Z
printf(^numero randomio %: hd Vn^+rand(! h %,,!Z
printf(^numero randomio /: hd Vn^+rand(! h %,,,!Z
printf(^numero randomio $: hd Vn^+rand(! h %,!Z
return ,Z
b
;.! )anipulando arqui1os
"ho 8ue a manipula52o de ar8ui.o# 6 uma da# oi#a# mai# importante na pro4rama52o de.ido o
arma)enamento e leitura de informa52o+ 8uando u#amo# .aria.ei# a8uilo fia temporariamente na
mem:ria en8uanto o pro4rama e#ti.er rodando depoi# do pro4rama #er finali)ado a memoria e
liberada e o #eu onteQdo de#tru7do e i##o pode #er um problema #e prei#armo# reuperar e##e#
dado# da .ari;.el+ para e.itar e##e problema podemo# riar ar8ui.o# no ID ou outro di#po#iti.o de
arma)enamento e ae##ar ele# 8uando prei#ar+ para riar um ar8ui.o na lin4ua4em C/C++
podemo# u#ar a fun52o fopen da bibliotea #tdio.h+ para u#ar e##a fun52o temo# 8ue pa##ar omo
ar4umento o nome do ar8ui.o ou endere5o ompleto dele e tipo de ae##o+ o tipo de ae##o 6 uma
#trin4 om o# #e4uinte# aratere#+ J'K para e#rita+ JrK para leitura+ JaK para e#rita e
onatena52o+ JbK para binario e de.e #er u#ada depoi# da e#rita ou leitura JrbK+ tamb6m podemo#
oloar um + no final indiando e#rita e leitura ou leitura e e#rita J'+K+ o tipo de ae##o de leitura
apena# abre o ar8ui.o 3; o tipo e#rita ele abre o ar8ui.o a#o o ar8ui.o n2o e*i#ta ele ria o
ar8ui.o+ ent2o no a#o para riar u#amo# tipo de ae##o de e#rita
Oinlude ]#tdio.hW
int main(.oid!
a
fopen(^eof.t*t^+^'^!Z
return ,Z
b
omo dito ante# podemo# u#ar o endere5o ompleto para riar ou ae##ar o ar8ui.o (#: lembrando
8ue a lin4ua4em C/C++ u#ar ontra barra omo :di4o de e#ape ent2o temo# 8ue u#ar ontra barra
dupla!
Oinlude ]#tdio.hW
int main(.oid!
a
fopen(^C:VV<#er#VVft#$%&VVDe#ktopVVeof.t*t^+^'^!Z
return ,Z
b
para ae##armo# um ar8ui.o para e#rita ou leitura n2o ba#ta u#ar apena# a fun52o fopen+ temo# 8ue
atribuir ela a ponteiro do tipo FILE da bibliotea #tdio.h+ e depoi# u#ar a fun52o para e#re.er ou ler
o ar8ui.o+ depoi# do u#o da e#rita ou leitura temo# 8ue fehar o ar8ui.o para atuali)ar para i##o
u#amo# a fun52o flo#e da bibliotea #tdio.h #e4uido do ponteiro FILE
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
ft# g fopen(^eof.t*t^+^'^!Z
flo#e(ft#!Z
return ,Z
b
para e#re.er dentro do ar8ui.o e*i#tem muita# fun59e# uma dela# 6 o fprintf da bibliotea #tdio.h
8ue permite e#re.er nele formatando a #a7da+ para u#ar o fprintf 6 pareida om a fun52o #printf #:
8ue oloamo# o ponteiro FILE ante#
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
ft# g fopen(^eof.t*t^+^'^!Z
fprintf(ft#+^.i#item o forum eofVnVn^!Z
fprintf(ft#+^bM hft#h*^+$%&!Z
flo#e(ft#!Z
return ,Z
b
a diferen5a entre o tipo de ae##o J'K e JaK+ 8ue o tipo de ae##o J'K .ai abrir o ar8ui.o e apa4ar o
8ue e#ti.er la dentro 3; o tipo de ae##o JaK .ai e#re.er no final do 8ue e#ti.er la dentro
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
ft# g fopen(^eof.t*t^+^a^!Z
fprintf(ft#+^.i#item o forum eofVnVn^!Z
fprintf(ft#+^bM hft#$%&Vn^!Z
flo#e(ft#!Z
ft# g fopen(^eof.t*t^+^a^!Z
fprintf(ft#+^#e fo##e o ae##o ' #o teria e##a #trin4 la dentro^!Z
flo#e(ft#!Z
return ,Z
b
podemo# e#re.er uma #trin4 om a fun52o f'rite da bibliotea #tdio.h+ porem e##a fun52o 6 um
pouo mai# ompliada 8ue o fprintf+ nela temo# 8ue pa##ar omo ar4umento a #trin4 a #er
arma)enada+ o tamanho do tipo de dado+ o tamanho da #trin4 e o ponteiro
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
int main(.oid!
a
FILE dft#Z
har hak[\ g ^e#ta muito alor a8ui^Z
ft# g fopen(^eof.t*t^+^'^!Z
f'rite(hak+#i)eof(har!+#trlen(hak!+ft#!Z
flo#e(ft#!Z
return ,Z
b
podemo# u#ar fput# da bibliotea #tdio.h para arma)enar uma #trin4+ o# ar4umento# dela #ao a #trin4
e o ponteiro
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
ft# g fopen(^eof.t*t^+^'^!Z
fput#(^#ou um .iiado em anime# U>U ^+ft#!Z
flo#e(ft#!Z
return ,Z
b
para arma)enar um unio arater podemo# u#ar fput da bibliotea #tdio.h nele pa##amo# omo
ar4umento o arater depoi# o ponteiro
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
ft# g fopen(^eof.t*t^+^'^!Z
fput(UeU+ft#!Z
fput(UoU+ft#!Z
fput(UfU+ft#!Z
flo#e(ft#!Z
return ,Z
b
para fa)ermo# o in.er#o ou #e3a ler o ar8ui.o e arma)enar em uma .aria.el temo# di.er#a# fun59e#+
uma dela# 6 o f#anf da bibliotea #tdio.h 8ue ler o# dado# no ar8ui.o e arma)ena de forma
formatada em uma .aria.el+ no# ar4umento# pa##amo# o ponteiro do ar8ui.o a #trin4# om tipo do
ar8ui.o e por fim a .aria.el+
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
int hakZ
ft# g fopen(^eof.t*t^+^r^!Z
f#anf(ft#+^hd^+Yhak!Z
flo#e(ft#!Z
printf(^hd^+hak!Z
return ,Z
b
outra forma 6 u#ar o fread da bibliotea #tdio.h+ porem teriamo# 8ue #aber o tamanho e*ato do
ar8ui.o a #er opiada para i##o termiamo# e u#ar dua# fun5oe# uma 6 o f#eek para pular para o final
do ar8ui.o e o ftell para pe4ar a po#i52o (.amo# aprender i##o mai# para frente entao .ou u#ar um
ar8ui.o 8ue eu 3a #ei o tamanho!+ o# ar4umento# do fread #ao a arraM do tipo har onde .ai #er
arma)enado o tamanho do tipo de dado da .aria.el+ o tamanho do ar8ui.o derementado > % (no
a#o o meu ar8ui.o tem a #trin4 eof 8ue #2o $! e por fim o ponteiro do ar8ui.o
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
har hak[%,,\Z
ft# g fopen(^eof.t*t^+^r^!Z
fread(hak+#i)eof(hak!+$ > %+ft#!Z
flo#e(ft#!Z
printf(^h#^+hak!Z
return ,Z
b
Com a fun52o f4et# da bibliotea #tdio.h opiamo# uma 8uantidade e#peifia de #trin4+ pa##amo#
omo ar4umento para ela o ponteiro a 8uantidade de #trin4 e a .aria.el 8ue #era arma)enada
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
har hak[%,,\Z
ft# g fopen(^eof.t*t^+^r^!Z
f4et#(hak+$+ft#!Z
flo#e(ft#!Z
printf(^h#^+hak!Z
return ,Z
b
para opiar um unio arater u#amo# f4et da bibliotea #tdio.h+ #o pa##amo# omo ar4umento o
ponteiro do ar8ui.o e atribuimo# o retorno para uma .aria.el do tipo har
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
har hak[%,,\Z
ft# g fopen(^eof.t*t^+^r^!Z
hak[,\ g f4et(ft#!Z
hak[%\ g f4et(ft#!Z
hak[/\ g f4et(ft#!Z
hak[$\ g ,*,,Z
flo#e(ft#!Z
printf(^h#^+hak!Z
return ,Z
b
?ara riar um ar8ui.o temporario ou #e3a ele #era de#truido depoi# 8ue o pro4rama for finali)ado
u#amo# a fun52o tmpfile da bibliotea #tdio.h+ para u#ar e##a fun52o ba#ta atribuir a um ponteiro do
tipo FILE+ e##a fun52o 6 perfeita para arma)enar dado# temporariamente 8ue de.e #er de#truido no
final do pro4rama
Oinlude ]#tdio.hW
int main(.oid!
a
FILE eof g tmpfile(!Z
fprintf(eof+^$%&^!Z
return ,Z
b
para deletar um ar8ui.o u#amo# a fun52o remo.e da bibliotea #tdio.h+ nela pa##amo# omo
ar4umento o nome ou endere5o do ar8ui.o#
Oinlude ]#tdio.hW
int main(.oid!
a
remo.e(^eof.t*t^!Z
return ,Z
b
para renomear u#amo# a fun52o rename no ar4umento dela pa##amo# o nome ou endere5o do
ar8ui.o e o no.o nome
Oinlude ]#tdio.hW
int main(.oid!
a
rename(^eof.t*t^+^ft#.t*t^!Z
return ,Z
b
podemo# no# mo.imentar dentro de um ar8ui.o om a fun52o f#eek da bibliotea #tdio.h+ pa##amo#
omo ar4umento para e##a fun52o o ponteiro do ar8ui.o+ a po#i52o para onde ele .ai pular+ e a
o#tante 8ue india ponto de partida do pulo (iniio g CEERiCE@+ atual g CEERiC<N+ fim g
CEERiEND!
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft# g fopen(^eof.t*t^+^r^!Z
f#eek(ft#+>%+CEERiEND!Z
printf(^ultimo arater do ar8ui.o g h^+f4et(ft#!!Z
flo#e(ft#!Z
return ,Z
b
om a fun52o ftell da bibliotea #tdio.h podemo# retornar o a 8uantidade de po#i59e# ate he4a na
po#i52o atual+ para u#ar ela ba#ta pa##ar omo ar4umento o ponteiro do ar8ui.o e atribuir a uma
.aria.el do tipo int
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft# g fopen(^eof.t*t^+^r^!Z
int eofZ
f#eek(ft#+&+CEERiCE@!Z
eof g ftell(ft#!Z
printf(^hd^+eof!Z
flo#e(ft#!Z
return ,Z
b

outra forma de pe4ar a po#i52o atual 6 u#ar a fun52o f4etpo# da bibliotea #tdio.h+ ne##a fun52o
pa##amo# omo ar4umento o ponteiro do ar8ui.o+ e o endere5o de memoria de uma .aria.el do tipo
fpo#it
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft# g fopen(^eof.t*t^+^r^!Z
fpo#it eofZ
f#eek(ft#+$+CEERiCE@!Z
f4etpo#(ft#+Yeof!Z
printf(^hd^+eof!Z
flo#e(ft#!Z
return ,Z
b
tambem podemo# a.an5ar para determinada po#i52o om a fun52o f#etpo#+ pa##amor omo
ar4umento para ela o ponteiro do ar8ui.o e o endere5o de memoria de uma .aria.el do tipo fpo#it
om a po#i52o
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft# g fopen(^eof.t*t^+^r^!Z
fpo#it eof g EZ
f#etpo#(ft#+Yeof!Z
printf(^hd^+ftell(ft#!!Z
flo#e(ft#!Z
return ,Z
b
Com a fun52o re'ind da bibliotea #tdio.h .oltamo# para a po#i52o iniial+ nela #o pa##amo# omo
ar4umento o ponteiro do ar8ui.o
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft# g fopen(^eof.t*t^+^r^!Z
fpo#it eof g EZ
f#etpo#(ft#+Yeof!Z
re'ind(ft#!Z
printf(^hd^+ftell(ft#!!Z
flo#e(ft#!Z
return ,Z
b
om a fun52o feof da bibliotea #tdio.h retornamo# .erdadeiro 8uando e#ti.er no final do ar8ui.o+
para u#ar e##a fun52o #o pa##amo# o ponteiro do ar8ui.o# e pe4amo# o retorno
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft# g fopen(^eof.t*t^+^r^!Z
'hile(%!
a
if(feof(ft#!!
a
breakZ
b
printf(^h^+f4et(ft#!!Z
b
flo#e(ft#!Z
return ,Z
b
uma oi#a 8ue #e de.e tomar uidado na hora de arre4ar um ar8ui.o e oloar ele em uma arraM+
e##a arraM de.e #er maior 8ue 8uantidade de aratere# do ar8ui.o para e.itar falha buffer o.erflo'
e falha de #e4menta52o+ para e.itar i##o podemo# abrir o ar8ui.o .er o tamanho ate o ultimo
arater e aloar dinamiamente om a fun52o mallo
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
har deofZ
int tam g ,Z
ft# g fopen(^eof.t*t^+^r^!Z
f#eek(ft#+,+CEERiEND!Z
tam g ftell(ft#!Z
re'ind(ft#!Z
eof g mallo(#i)eof(har! d tam + %!Z
return ,Z
b
na lin4ua4em C++ podemo# u#ar a bibliotea f#tream+ para abrir um ar8ui.o# in#taniamo# o
f#tream+ depoi# u#amo# a fun52o open pa##amo# omo ar4umento o ar8ui.o depoi# o tipo de ae##o
8ue 6 (io#::in #eria o '+ io#::out #eria o r+ io#::binarM #eria o b+ io#::app #eria o a!+ no tipo de ae##o
#er hou.er doi# #eparamo# pelo pipe+ tambem u#amo# a fun52o lo#e para fehar
Oinlude ]io#treamW
Oinlude ]f#treamW
u#in4 name#pae #tdZ
int main(.oid!
a
f#tream ft#Z
ft#.open(^eof.t*t^+io#::out l io#::app!Z
ft#.lo#e(!Z
return ,Z
b
para e#re.ermo# no ar8ui.o ba#ta redireionar o flu*o 8ue #eria o me#mo do out para o ob3eto
in#taniado
Oinlude ]io#treamW
Oinlude ]f#treamW
u#in4 name#pae #tdZ
int main(.oid!
a
f#tream ft#Z
ft#.open(^eof.t*t^+io#::out l io#::app!Z
ft# ]] ^eof ^Z
ft#.lo#e(!Z
return ,Z
b
para ler o ar8ui.o fa)emo# o in.er#o
Oinlude ]io#treamW
Oinlude ]f#treamW
u#in4 name#pae #tdZ
int main(.oid!
a
f#tream ft#Z
har hak[%,,\Z
ft#.open(^eof.t*t^+io#::in!Z
ft# WW hakZ
ft#.lo#e(!Z
out ]] hakZ
return ,Z
b
6 po##i.el de#obrir o# atributo# do ar8ui.o omo tamanho+ ultima .e) 8ue foi ae##ado ou
modifiado+ inode 8ue #eria uma e#peie de endere5o lo4io no linu*+ tipo de permi##2o et+ para
i##o .amo# u#ar a e#trutura #tat e a fun52o #tat da bibliotea #M#/#tat.h embora e##a bibliotea #e3a do
linu* ela tambem e*i#te no# ompiladore# do 'indo'#+ para ome5ar delaramo# a #trut #tat
depoi# u#amo# a fun52o #tat pa##ando omo ar4umento para ela uma #trin4 8ue #eria o ar8ui.o+ e o
endere5o de memoria da #trut+ por fim u#amo# o# atributo# da e#trutura #tat 8ue #2o #ti#i)e para
retornar o tamanho em bit#+ #tiatime para o tempo do ultimo ae##o (tempo em #e4undo# dei# de
%10,!+ #tiino para o inode (#o funiona no linu*!+ #tinlink 8uantidade de link# (#o funiona no
linu*!+ #tiuid para identifiador do dono (#o funiona no linu*! e #ti4id para identifiar o 4rupo (#o
funiona no linu*!+ e*i#tem outro# atributo# alem do# 8ue eu itei
Oinlude ]#tdio.hW
Oinlude ]#M#/#tat.hW
Oinlude ]time.hW
int main(.oid!
a
#trut #tat ft#Z
timeit ae##o+ modifiZ
#tat(^eof.t*t^+Yft#!Z
printf(^tamanho: hd Vn^+ft#.#ti#i)e!Z
ae##o g ft#.#tiatimeZ
modifi g ft#.#timtimeZ
printf(^ae##o: h# Vn^+time(Yae##o!!Z
printf(^modifiado: h# Vn^+time(Ymodifi!!Z
printf(^inode: hd Vn^+ft#.#tiino!Z
printf(^8nt link#: hd Vn^+ft#.#tinlink!Z
printf(^id do dono: hd Vn^+ft#.#tiuid!Z
printf(^id do 4rupo: hd Vn^+ft#.#ti4id!Z
return ,Z
b
;.- )anipulando diretorio
?ara manipular diretorio no #i#tema 'indo'# u#amo# a bibliotea dirent.h 3a no #i#tema linu*
u#amo# #M#/dir.h+ para li#tar o# ar8ui.o# de um diretorio temo# 8ue abrir e##e diretorio om a fun52o
opendir da bibliotea dirent.h (#M#/dir.h no a#o do linu*!+ pa##amo# omo ar4umento o diretorio
8ue .amo# abrir e atribuimo# o retorno da fun52o para um ponteiro do tipo DIN+ podemo# u#ar o
lo#edir para fehar o diretorio nele pa##amo# omo ar4umento o ponteiro DIN
Oinlude ]#tdio.hW
Oinlude ]dirent.hW
int main(.oid!
a
DIN deofZ
eof g opendir(^:VV^!Z
lo#edir(eof!Z
return ,Z
b
depoi# ba#ta u#ar a fun52o readdir da bibliotea dirent.h (#M#/dir.h!+ pa##ando omo ar4umento para
ela o ponteiro 8ue atribuimo# o diretorio e por fim atribuimo# o retorno para um ponteiro de uma
e#trutura do tipo dirent+ omo a fun52o readdir ler ar8ui.o por ar8ui.o u#ar ela em um la5o 6 a
melhor alternati.a
Oinlude ]#tdio.hW
Oinlude ]dirent.hW
int main(.oid!
a
DIN deofZ
#trut dirent dft#Z
eof g opendir(^:VV^!Z
'hile(ft# g readdir(eof!!
a
b
lo#edir(eof!Z
return ,Z
b
para ler o nome do# ar8ui.o# ba#ta u#ar a arraM diname da e#trutura dirent
Oinlude ]#tdio.hW
Oinlude ]dirent.hW
int main(.oid!
a
DIN deofZ
#trut dirent dft#Z
eof g opendir(^:VV^!Z
'hile(ft# g readdir(eof!!
a
printf(^h# Vn^+ft#>Wdiname!Z
b
lo#edir(eof!Z
return ,Z
b
tambem 6 po##i.el on#e4uir o inode do ar8ui.o ou diretorio pela e#trutura dirent pela .arai.el
diino+ porem n2o 6 funional no 'indo'#
Oinlude ]#tdio.hW
Oinlude ]#M#/dir.hW
int main(.oid!
a
DIN deofZ
#trut dirent dft#Z
eof g opendir(^/^!Z
'hile(ft# g readdir(eof!!
a
printf(^nome: h# Vninode: hd VnVn^+ft#>Wdiname+ft#>Wdiino!Z
b
lo#edir(eof!Z
return ,Z
b
;.7 )anipulando o terminal
O u#o do terminal pode failtar na manipula52o do #i#tema operaional podendo a4ili)ar u#o de "?I
para pro4rama# 3a riado+ para u#ar o terminal e*i#te a fun52o #M#tem da bibliotea #tdlib.h+ e##a
fun52o permite pa##ar omo ar4umento o omando 8ue #eria u#ado no termina e depoi# e*ibi no
pro4rama a #aida
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
#M#tem(^dir^!Z
return ,Z
b
a ada fun52o #M#tem #eria e8ui.alente a um no.o terminal aberto entao n2o da para ae##ar
informa52o de determinado #M#tem pelo outro #M#tem+ no e*emplo abai*o o primeiro #M#tem .ai
para o diretorio anterior e o #e4undo #M#tem ler o diretorio+ o #e4undo #M#tem .ai ler o diretorio 8ue
e#ta o e*euta.el e nao o diretorio anterior 8ue e#ta o primeiro #M#tem
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
#M#tem(^d ..^!Z
#M#tem(^dir^!Z
return ,Z
b
para e.itar o e*emplo aima podemo# u#ar omando# no me#mo #M#tem #eparado#+ no #i#tema
'indo'# u#amo# dua# .e)e# o ^e^ omerial (YY! no linu* u#amo# ponto e .ir4ula (Z!
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
#M#tem(^d .. YY dir^!Z
return ,Z
b
o #M#tem .ai en.iar o flu*o diretamente para tela do omputador #em a po##ibilidade de manipular
diretamente+ mai# podemo# manipular indiretamente arma)enando o flu*o para o ID om o
operador de #aida do terminal 8ue 6 o #imbolo de maior #e4uido do nome do ar8ui.o+ depoi#
abrimo# o ar8ui.o e pe4amo# o# dado# no.amente
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
FILE dft#Z
har dhakZ
int tam+ ont g ,Z
#M#tem(^dir W eof.t*t^!Z
ft# g fopen(^eof.t*t^+^r^!Z
f#eek(ft#+,+CEERiEND!Z
tam g ftell(ft#!Z
re'ind(ft#!Z
hak g mallo(#i)eof(har! d tam + %!Z
'hile(%!
a
if(feof(ft#!!
a
breakZ
b
hak[ont\ g f4et(ft#!Z
ont++Z
b
flo#e(ft#!Z
printf(^h#^+hak!Z
return ,Z
b
podemo# tambem u#ar a fun52o popen da bibliotea #tdio.h para manipula a #aida do terminal+ o
popen e paraido om a manipula52o de ar8ui.o+ u#amo# um ponteiro do tipo FILE para atribuir
ele+ pa##amo# omo ar4umento o omando para fun52o popen e o tipo de ae##o+ depoi# e #o ler o
ponteiro omo #e fo##e um ar8ui.o+ e para fehar u#amo# plo#e pa##ando omo ar4umento o
ponteiro
Oinlude ]#tdio.hW
int main(.oid!
a
FILE dft#Z
ft# g popen(^d .. YY dir^+^r^!Z
'hile(%!
a
if(feof(ft#!!
a
breakZ
b
printf(^h^+f4et(ft#!!Z
b
plo#e(ft#!Z
return ,Z
b
<.0 ?rientao a o,2eto
orienta52o a ob3eto tambem hamado ?OO (?ro4rama52o Orientada a Ob3eto! permite manipular o
odi4o omo um todo+ permitindo ab#trair e or4ani)ar determinada# parte# omo uma unia
e#trutura ou unia la##e+ de##a e#trutura podera #er 4erado o ob3eto ou in#taia+ 6 pelo ob3eto 8ue
permite manipular a la##e e ada ob3eto 4erado da me#ma la##e n2o afetara o outro+ a# .ari.ei# e
fun59e# u#ando o oneito de orienta52o a ob3eto de.era #er hamada de atributo# (.aria.ei#! e
metodo# (fun59e#! embora hama>la# de .aria.ei# e fun59e# tambem 6 aeita.el porem #e3a mai#
orreto o termo atributo# e metodo#+ uma la##e pode reeber o# atributo# e metodo# de outra la##e
i##o 6 hamado heran5a e 6 forma fail de reapro.eitar o odi4o e n2o prei#ar re#re.e>lo+ om o
enap#ulamento permitimo# e#olher omo de.e #er ae##ado a la##e e na lin4ua4em C++ e*i#te $
tipo# de ae##o 8ue #2o publi (publio!+ pri.ate (pri.ado!+ proteted (prote4ido!+ tambem e*i#te o
polimorfi#mo 8ue 6 8uando determinada atributo ou metodo a#ume dua# ou mai# forma#+ e*i#tem o#
on#trutore# 8ue permite iniiar um .alor dentro de um atributo ou hamar determinado metodo
8uando delarado
<.1 ?rientao a o,2etoC Class
Como dito ante# a# la##e# #2o a# e#trutura# u#ada# na orienta52o a ob3eto da lin4ua4em C+++ para
#e riar uma la## 6 a me#ma oi#a 8ue riar uma e#trutura #trut delaramo# o tipo da e#trutura 8ue
no a#o 6 la## #e4uida do nome e depoi# um e#opo e por fim um ponto e .ir4ula
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
bZ
int main(.oid!
a
return ,Z
b
para in#taniar ou 4erar o ob3eto ba#ta oloar o nome da la## #e4uido do nome da in#tania
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
bZ
int main(.oid!
a
eof ob3etoZ
return ,Z
b
tambem poderiamo# in#taniar om ponteiro#
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
bZ
int main(.oid!
a
eof dob3etoZ
return ,Z
b
ou dinamiamente om o operador ne' e liberar om o operador delete
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
bZ
int main(.oid!
a
eof dob3eto g ne' eof(!Z
delete ob3etoZ
return ,Z
b
<.2 ?rientao a o,2etoC ncapsulamento
O enap#ulamento permite re#trin4ir determinado# ae##o dentro da la##e i##o permite manipular
omo de.e #er ae##ado determinado# metodo# e atributo#+ em teoria nao prei#amo# #aber omo
funiona internamente um omputador para poder u#alo o enap#ulamento permite fa)er i##o nao 6
nee##ario #aber omo a la## funiona para poder u#ala+ e*i#tem $ tipo# ae##o# na lin4ua4em C++
8ue #2o o# publi+ pri.ate e proteted+ o# publi permite 8ual8uer ae##o onde a la## foi in#taniada
ou herdada+ o# pri.ate permite ae##o apena# dentro da me#ma la##+ e o# proteted permite o
ae##o dentro da me#ma la## e a# la## herdeira+ para definir o tipo de ae##o oloamo# o tipo de
ae##o #e4uido de doi# ponto# (#e nao definimo# nenhum tipo o ompilador .ai definir o tipo padrao
8ue #eria o pri.ate!
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
bZ
int main(.oid!
a
return ,Z
b
poderiamo# definir o# outro# tipo# dentro tambem
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
pri.ate:
proteted:
bZ
int main(.oid!
a
return ,Z
b
n2o e*i#te uma ordem e nem um limite para o me#mo tipo
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
proteted:
publi:
pri.ate:
proteted:
publi:
bZ
int main(.oid!
a
return ,Z
b
o# atributo# e metodo# teram a permi##2o do ultimo tipo de ae##o ante# dele
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi: int ft#Z
publi: int lolZ
pri.ate: int hakZ
bZ
int main(.oid!
a
return ,Z
b
8uando o tipo de ae##o 6 o me#mo 8ue o anterior nao prei#amo# definir o tipo de ae##o deno.o
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
int ft#Z
int lolZ
pri.ate: int hakZ
bZ
int main(.oid!
a
return ,Z
b
para ae##ar atributo# 6 a me#ma oi#a 8ue a e#trutura #trut+ no a#o u#amo# ponto+ a#o #e3a
ponteiro u#amo# h7fen e maior (>W! depoi# o atributo de#e3ado
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi: int ft#Z
bZ
int main(.oid!
a
eof aZ
eof dbZ
eof d g ne' eof(!Z
a.ft# g $%&Z
b>Wft# g %,,Z
>Wft# g %&,Z
out ]] a.ft# ]] endlZ
out ]] b>Wft# ]] endlZ
out ]] >Wft# ]] endlZ
delete Z
return ,Z
b
o# m6todo# tamb6m #2o i4uai#
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
.oid ft#(.oid!
a
out ]] ^alo te#tando+ te#tando %/$^Z
b
bZ
int main(.oid!
a
eof hakZ
hak.ft#(!Z
return ,Z
b
podemo# riar m6todo# fora do e#opo da la##+ para fa)er i##o temo# 8ue oloar um prototipo dela
dentro da la## e no m6todo temo# 8ue oloar o nome da la## 3unto om o nome do metodo
#eparado por dua# .e)e# o ponto (::!
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
.oid ft#(.oid!Z
bZ
.oid eof::ft#(.oid!
a
out ]] ^alo te#tando+ te#tando %/$^Z
b
int main(.oid!
a
eof hakZ
hak.ft#(!Z
return ,Z
b
a maneira anterior .ai aloar a la## e o m6todo em parte# diferente na mem:ria ent2o n2o 6 muito
reomendado fa)er i##o+ 6 po##7.el aloar o# doi# 3unto# me#mo #eparado# da8uela forma para i##o
podemo# u#ar o inline
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
.oid ft#(.oid!Z
bZ
inline .oid eof::ft#(.oid!
a
out ]] ^alo te#tando+ te#tando %/$^Z
b
int main(.oid!
a
eof hakZ
hak.ft#(!Z
return ,Z
b
tamb6m podemo# riar uma la## dentro da la##
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
la## ft#
a
publi:
int hakZ
bZ
bZ
int main(.oid!
a
return ,Z
b
para ae##ar a #e4unda la## temo# 8ue in#taniar ela+ para i##o oloamo# a primeira la## #e4uida
de doi# ponto# e a #e4unda la##
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
la## ft#
a
publi:
int hakZ
bZ
bZ
int main(.oid!
a
eof::ft# lolZ
lol.hak g $%&Z
out ]] lol.hakZ
return ,Z
b
podemo# riar .aria# la## dentro da outra
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
la## ft#
a
publi:
la## hak
a
publi:
int .alorZ
bZ
bZ
bZ
int main(.oid!
a
eof::ft#::hak lolZ
lol..alor g $%&Z
out ]] lol..alorZ
return ,Z
b
#e a 4ente oloar o identifiador friend ante# do metodo n2o prei#amo# in#taniar a la## para u#ar
a8uele m6todo
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
friend .oid ft#(.oid!
a
out ]] ^a .ida e um al4oritimo in#ano U>U ^Z
b
bZ
int main(.oid!
a
ft#(!Z
return ,Z
b
ate a4ora a 4ente #: t; u#ando o ae##o publio .amo# u#ar o ae##o pri.ado um pouo+ a
delara52o do# doi# #2o a# me#ma# omo dito ante#+ a diferen5a 8ue o ae##o publio pode #er
u#ado em 8ual8uer parte do :di4o dei# de 8ue #e3a in#taniado+ 3; o pri.ado #: poder; #er u#ado
dentro da pr:pria la##+ um e*emplo #eria riar um m6todo publio para entrar om o .alor e##e
.alor #eria arma)enado dentro de um atributo pri.ado o me#mo m6todo anterior hamaria outro
m6todo pri.ado 8ue faria uma onta e arma)enaria em um atributo publio+ em outra# pala.ra# a
4ente #: teria ae##o publio p entrada de dado# e o re#ultado e n2o ao proe##o da onta
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
.oid entrada(int .alor!
a
ft# g .alorZ
8uadrado(!Z
b
int re#ultadoZ
pri.ate:
int ft#Z
.oid 8uadrado(.oid!
a
re#ultado g ft# d ft#Z
b
bZ
int main(.oid!
a
eof ob3etoZ
ob3eto.entrada(&!Z
out ]] ob3eto.re#ultadoZ
return ,Z
b

no e*emplo aima n2o prei#amo# #aber omo a la## toda funiona a Qnia oi#a nee##;ria 6 u#o
do m6todo JentradaK e do atributo Jre#ultadoK+ e*i#te tamb6m o# ae##o prote4ido 8ue .amo# .er
mai# para frente em heran5a
<.! ?rientao a o,2etoC Aerana
" heran5a permite 8ue determinada la## reeba todo# o# atributo# e metodo# publio# e prote4ido#
de uma outra la##+ i##o permite dei*ar o :di4o reutili);.el+ para herdar uma la## depoi# do nome
dela oloamo# doi# ponto# (:! #e4uido do tipo de ae##o da8uela la## (maioria da# .e)e# 6
publio!+ e por fim o nome da la## da onde e#ta herdando o# metodo# e atributo#+ no e*emplo
abai*o a la## ft# e#ta herdando o# m6todo# e atributo# da la## eof+ ou #e3a ele herdo apena# o
m6todo hak
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
int hak(int .alor!
a
return .alor d .alorZ
b
bZ
la## ft#: publi eof
a
bZ
int main(.oid!
a
return ,Z
b
para u#ar e me#ma oi#a 8ue ti.e##e riado e##e# m6todo# e atributo# dentro da la##
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
int hak(int .alor!
a
return .alor d .alorZ
b
bZ
la## ft#: publi eof
a
bZ
int main(.oid!
a
ft# lolZ
out ]] lol.hak($%&!Z
return ,Z
b
no e*emplo aima eu in#taniei a la## ft# e u#ei o m6todo 8ue ele herdo+ o u#o de heran5a pode
a4ili)ar ria52o de no.o# m6todo#+ por e*emplo o odi4o abai*o eu fa5o um no.o m6todo
retornando o ubo do nQmero para i##o eu u#o o m6todo herdado
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
int hak(int .alor!
a
return .alor d .alorZ
b
bZ
la## ft#: publi eof
a
publi:
int ubo(int numero!
a
return numero d hak(numero!Z
b
bZ
int main(.oid!
a
ft# lolZ
out ]] lol.ubo(&!Z
return ,Z
b
podemo# herdar mai# de uma la## para i##o ba#ta #eparar por .7r4ula
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
int hak(int .alor!
a
return .alor d .alorZ
b
bZ
la## matematia
a
publi:
float piZ
bZ
la## ft#: publi eof+ publi matematia
a
bZ
int main(.oid!
a
ft# lolZ
lol.pi g $.%E%&Z
out ]] lol.piZ
return ,Z
b
8uando uma la## herda dua# ou mai# la## e e##a# la## tem um metodo ou atributo om o me#mo
nome i##o pode 4erar ambi4uidade no odi4o e pode da erro+ para e.itar de.emo# e#peifiar o
nome da la## #e4uido de dua# .e)e# doi# ponto# (::! e o atributo ou metodo
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## ft#
a
publi:
int .alorZ
bZ
la## eof
a
publi:
int .alorZ
bZ
la## hak: publi ft#+ publi eof
a
publi:
bZ
int main(.oid!
a
hak lolZ
lol.ft#::.alor g $%&Z
lol.eof::.alor g %,,Z
out ]] lol.ft#::.alor ]] endlZ
out ]] lol.eof::.alor ]] endlZ
return ,Z
b
tamb6m podemo# endere5ar um la## herdada para i##o ba#ta 4erar o ob3eto da# la## herdada e
atribuir o outro ob3eto 8ue herdo ela#
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## ft#
a
publi:
int .alorZ
bZ
la## eof
a
publi:
int .alorZ
bZ
la## hak: publi ft#+ publi eof
a
publi:
bZ
int main(.oid!
a
hak lolZ
ft# herana% g lolZ
eof herana/ g lolZ
herana%..alor g $%&Z
herana/..alor g %,,Z
out ]] herana%..alor ]] endlZ
out ]] herana/..alor ]] endlZ
return ,Z
b
omo dito o tipo de ae##o prote4ido ou proteted pode #er ae##ado apena# pela me#ma la## ou
pela# la## herdada+ no e*emplo abai*o eu n2o poderia u#ar diretamente o metodo hak embora eu
poderia herdar ele e riar um metodo publio para hamar ele
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
proteted:
int hak(int .alor!
a
return .alor d .alorZ
b
bZ
la## ft#: publi eof
a
publi:
int fla.io(int *!
a
return hak(*!Z
b
bZ
int main(.oid!
a
ft# fZ
out ]] f.fla.io($%&!Z
return ,Z
b
<.- ?rientao a o,2etoC Construtores
O# on#trutore# permite iniiar .alore# no# atributo# ou hamar metodo# a##im 8ue o ob3eto for
in#taniado para #e riar um on#trutor ba#ta riar um metodo #em tipo de retorno om o me#mo
nome da la##
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
eof(.oid!
a
b
bZ
int main(.oid!
a
eof lolZ
return ,Z
b
e dentro do on#trutor atribu7mo# o# .alore# ao# atributo#
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
eof(.oid!
a
ft# g $%&Z
b
int ft#Z
bZ
int main(.oid!
a
eof lolZ
out ]] lol.ft#Z
return ,Z
b
tamb6m 6 po##7.el hamar m6todo# pelo on#trutor
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
eof(.oid!
a
ft#(!Z
b
.oid ft#(.oid!
a
out ]] ^boku 'a ft# de#u^Z
b
bZ
int main(.oid!
a
eof lolZ
return ,Z
b
podemo# pa##ar .alore# pelo on#trutor a##im 8ue in#taniar
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
eof(int *!
a
ft# g *Z
b
int ft#Z
bZ
int main(.oid!
a
eof lol($%&!Z
out ]] lol.ft#Z
return ,Z
b
tamb6m e*i#tem o# de#trutore# 8ue #2o hamado# 8uando o ob3eto for de#tru7do+ para riar um
de#trutor riamo# um m6todo om o me#mo nome da la## i4ual ao on#trutor por6m oloamo# um
til (`! ante# do nome
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
eof(!
a
on#truido(!Z
b
`eof(!
a
de#truido(!Z
b
.oid on#truido(.oid!
a
out ]] ^foi on#truido mm ^ ]] endlZ
b
.oid de#truido(.oid!
a
out ]] ^foi de#truido U>U ^ ]] endlZ
b
bZ
int main(.oid!
a
eof dft# g ne' eof(!Z
delete ft#Z
return ,Z
b
<.7 ?rientao a o,2etoC 8olimor"ismo
?olimorfi#mo 6 8uando determinado ob3eto+ metodo+ atributo+ e.ento ou 8ual8uer outra oi#a
a##ume dua# ou mai# forma#+ na lin4ua4em C++ o# ob3eto polim:rfio 6 u#ado o identifiador
.irtual+ um do# metodo# .irtual 6 fa)er 8ue determinado metodo a ada heran5a ele fa5a a52o
diferente+ para fa)er i##o delaramo# ele omo .irtual na la##+ e depoi# reriamo# o prototipo dele
na# la## 8ue herdar
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
.irtual .oid lol(.oid!
a
b
bZ
la## ft#: publi eof
a
publi:
.irtual .oid lol(.oid!
a
out ]] ^la## ft#^ ]] endlZ
b
bZ
la## hak: publi eof
a
publi:
.irtual .oid lol(.oid!
a
out ]] ^la## hak^ ]] endlZ
b
bZ
la## fbi: publi hak+ publi ft#
a
publi:
bZ
int main(.oid!
a
fbi ob3etoZ
ob3eto.hak::lol(!Z
ob3eto.ft#::lol(!Z
return ,Z
b
tambem 6 po##7.el oloar ae##o .irtual para uma la## herdada+ a##im toda# a# la## ae##ara a
me#ma #em 4era ambi4uidade no :di4o
Oinlude ]io#treamW
u#in4 name#pae #tdZ
la## eof
a
publi:
int .alorZ
bZ
la## ft#: .irtual publi eof
a
publi:
bZ
la## hak: .irtual publi eof
a
publi:
bZ
la## lol: publi hak+ publi ft#
a
publi:
bZ
int main(.oid!
a
lol ob3etoZ
ob3eto..alor g $%&Z
out ]] ob3eto..alor ]] endlZ
out ]] ob3eto.hak::.alor ]] endlZ
out ]] ob3eto.ft#::.alor ]] endlZ
return ,Z
b
uma e#trutura polimorfia 6 o union 8ue permite ter mai# de um tipo para o me#mo endere5o de
memoria (embora #: po##a a##umir um .alor por .e)!
Oinlude ]io#treamW
u#in4 name#pae #tdZ
union eof
a
int inteiroZ
float 8uebradoZ
bZ
int main(.oid!
a
eof ft#Z
ft#.inteiro g $%&Z
out ]] ft#.inteiro ]] endlZ
ft#.8uebrado g $.%&Z
out ]] ft#.8uebrado ]] endlZ
return ,Z
b
D.0 E8I &indo's
<ma "?I 6 uma fun52o ou proedimento de determinada plataforma 8ue #: funiona para a8uela
plataforma e nenhuma outra+ uma "?I 6 uma fun52o do pr:prio #i#tema operaional e n2o da
lin4ua4em ou de uma bibliotea da lin4ua4em+ o #i#tema operaional 'indo'# e*i#tem milhare# de
"?I# omo por e*emplo mo.imento do mou#e+ apertar de botao ou #imple#mente #imular aperta de
bot2o+ de#li4ar ou li4ar #i#tema# e dri.e#+ manipular o editor de re4i#tro+ ae##ar tipo# ar8ui.o# 8ue
#: e*item no #i#tema 'indo'#+ e*eutar pro4rama#+ manipular a memoria+ riar e deletar u#uario ou
ar8ui.o#+ intera4ir om hard'are entre outra# milhare# de oi#a# 8ue #: 6 po##7.el no #i#tema
'indo'#+ boa parte da# "?I# do #i#tema 'indo'# fia dentro de ar8ui.o# hamado# DLL e #e faltar
uma de##a# DLL o #i#tema operaional n2o podera e*eutar determinada# tarefa#+ e boa parte da#
"?I do 'indo'# pode terminar om a letra " indiando "CC ou a letra A indiando <NICODE por
e*emplo CopMFile" ou CopMFileA+ para u#ar boa parte da# "?I na lin4ua4em C/C++ temo# 8ue
delarar a bibliotea J'indo'#.hK e##a bibliotea hama outra# bibliotea# 8ue ae##a a# DLL de
forma fail+ omo dito ante# no #i#tema operaional 'indo'# e*i#tem milhare# de "?I# n2o 6
po##7.el eu oloar toda# a8ui me#mo por 8ue #: onhe5o um numero bem limitado de "?I+ a
primeira "?I 8ue .amo# .er .ai #er a CopMFile da bibliotea 'indo'#.h 8ue permite opiar
determinado ar8ui.o para outro diretorio+ ne##a "?I pa##amo# omo ar4umento o ar8ui.o a #er
opiado e o de#tino tambem e*i#te um outro ar4umento 8ue #eria uma hea4em #e .ai opiar o
ar8ui.o a#o e*i#ta ou n2o ne##e ar4umento u#amo# a on#tante @N<E ou F"LCE da bibliotea
'indo'#.h (no e*emplo abai*o eu to oloando apena# o nome da pa#ta+ ou #e3a+ e##a pa#ta e#ta no
me#mo diret:rio do e*eut;.el por6m eu tambem poderia oloar o endere5o ompleto!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
CopMFile"(^ft#.t*t^+^ar8ui.oVVft#.t*t^+F"LCE!Z
return ,Z
b
tambem e*i#te o tipo DOOL da bibliotea 'indo'#.h+ e a# on#tante @N<E e F"LCE 8ue #eria
e8ui.alente a bibliotea #tdbool.h
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
DOOL .erdadeiro g @N<EZ
DOOL fal#o g F"LCEZ
printf(^. g hd Vnf g hd^+.erdadeiro+fal#o!Z
return ,Z
b

alem da "?I CopMFile e*i#te a "?I Bo.eFile 8ue mo.e o ar8ui.o+ para u#ar e##a "?I pa##amo#
omo ar4umento o ar8ui.o a #er opiado e o de#tino
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
Bo.eFile"(^ft#.t*t^+^ar8ui.oVVft#.t*t^!Z
return ,Z
b
e*i#te "?I DeleteFile 8ue remo.e o ar8ui.o+ o ar4umento dela 6 o ar8ui.o a #er deletado
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
DeleteFile"(^ft#.t*t^!Z
return ,Z
b
om a "?I Nemo.eDiretorM podemo# remo.er um diret:rio+ o# ar4umento# dela 6 o diret:rio a #er
remo.ido
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
Nemo.eDiretorM"(^ar8ui.o^!Z
return ,Z
b
e*i#te "?I CreateDiretorM 8ue ria um diret:rio+ o# ar4umento# dela #2o o nome do diret:rio e o
tipo de atributo de #e4uran5a (n2o .ou me aprofundar ni##o ent2o podemo# oloar um , nele!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
CreateDiretorM"(^ar8ui.o^+,!Z
return ,Z
b
om a "?I (etCurrentDiretorM retornamo# o diret:rio atual+ nele pa##amo# omo ar4umento o
tamanho da arraM onde #er; arma)enado e a arraM do tipo har
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
har ft#[%,,\Z
(etCurrentDiretorM"(%,,+ft#!Z
printf(^h#^+ft#!Z
return ,Z
b
para mudar o diret:rio atual u#amo# a "?I CetCurrentDiretorM e pa##amo# omo ar4umento o
diret:rio
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
har ft#[%,,\Z
CetCurrentDiretorM"(^:VV^!Z
(etCurrentDiretorM"(%,,+ft#!Z
printf(^h#^+ft#!Z
return ,Z
b
para a 4ente e*eutar um pro4rama ou abrir um diretorio ou ar8ui.o podemo# u#ar "?I
ChellE*eute pa##amo# omo ar4umento o handle para 3anela (n2o .amo# u#ar i##o por en8uanto
ent2o oloamo# ,!+ pa##amo# omo ar4umento de tipo de ae##o (open g e*euta+ e*plore g abri
a#o #e3a diret:rio+ e*i#tem outro# al6m de##e# doi#!+ o nome do ar8ui.o ou diret:rio+ o ar4umento
do ar8ui.o (e##e ar4umento #2o para a8uele# pro4rama de omando!+ o diretorio orrente (podemo#
oloar , a#o definimo# o endere5o ompleto do ar8ui.o!+ e omo ele #era hamado (CAiCIOA
g normal+ CAiIIDE g oulto+ CAiB"eIBInE g ma*imi)ado+ CAiBINIBInE g minimi)ado!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
ChellE*eute"(,+^open^+^:VV'indo'#VV#M#tem$/VVmd.e*e^+^/ dir YY pau#e^+,+CAiCIOA!Z
return ,Z
b
a4ora u#ando o ChellE*eute para abrir uma pa#ta
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
ChellE*eute"(,+^e*plore^+^:VV^+,+,+CAiCIOA!Z
return ,Z
b
tamb6m 6 po##7.el e*eutar pro4rama# om a fun52o AinE*e nele pa##amo# omo ar4umento
omando a #er e*eutado e ontrole da 3anela (n2o .ou me aprofundar ni##o por en8uanto ent2o
oloamo# ,!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
AinE*e(^:VV'indo'#VV#M#tem$/VVmd.e*e / dir YY pau#e^+,!Z
return ,Z
b
para mudar o t7tulo da 3anela do on#ole u#amo# a "?I CetCon#ole@itle e pa##amo# omo
ar4umento o no.o t7tulo+ por6m e##a "?I #: .ai mudar o t7tulo en8uanto o pro4rama e#ti.er rodando
Oinlude ]#tdio.hW
Oinlude ]onio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
CetCon#ole@itle(^forum eof^!Z
4eth(!Z
return ,Z
b
para mudar a or do terminal tanto o te*to (fore4round! 8uanto o fundo (bak4round!+ temo# 8ue
pe4ar o handle da 3anela para i##o u#amo# a "?I (etCtdIandle pa##amo# omo ar4umento para ela
a on#tante C@DiO<@?<@iI"NDLE e atribu7mo# a fun52o para uma .ari;.el do tipo I"NDLE+
para terminar u#amo# a "?I CetCon#ole@e*t"ttribute para mudar a or+ pa##amo# omo ar4umento
para ela a .ari;.el do tipo I"NDLE e um nQmero em he*adeimal de ,*,, ate ,*ff (o primeiro
nQmero muda a or do fundo e o #e4undo muda a or do te*to+ e*emplo ,*GE o nQmero G .ai oloa
o fundo amarelo e o E a or do te*to .ermelha!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
I"NDLE ft#Z
ft# g (etCtdIandle(C@DiO<@?<@iI"NDLE!Z
printf(^te*to om a or padrao do terminal^!Z
CetCon#ole@e*t"ttribute(ft#+,*,/!Z
printf(^fundo preto or .erde^!Z
CetCon#ole@e*t"ttribute(ft#+,*f&!Z
printf(^fundo brano or ro*o^!Z
CetCon#ole@e*t"ttribute(ft#+,*GE!Z
printf(^fundo amarelo or .ermelho^!Z
return ,Z
b
podemo# mudar a po#i52o do ur#or do terminal tambem u#ando a "?I CetCon#oleCur#or?o#ition+
ne##a fun52o pa##amo# omo ar4umento o handle da 3anela 8ue no a#o teria 8ue u#ar a "?I
(etCtdIandle para on#e4uir+ e uma e#trutura iCOOND om a po#i52o e e _
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
int main(.oid!
a
#trut iCOOND eofZ
I"NDLE ft#Z
eof.e g $Z
eof._ g &Z
ft# g (etCtdIandle(C@DiO<@?<@iI"NDLE!Z
CetCon#oleCur#or?o#ition(ft#+eof!Z
return ,Z
b
para riar uma thread (#ubproe##o! u#amo# a "?I Create@hread+ nele pa##amo# omo ar4umento o
atributo de #e4uran5a (.amo# oloar , a8ui!+ o tamanho do #tak (tambem .amo# oloar um ,!+ a
fun52o 8ue #era hamada no thread (temo# 8ue u#ar tMpea#t para
L?@INE"DiC@"N@iNO<@INE!+ o ar4umento da fun52o (podemo# oloar ,!+ omo #era
iniiado a thread (podemo# oloar , para iniiar a##im 8ue u#ar fun52o ou u#ar
CNE"@EiC<C?ENDED para ome5ar a thread pau#ado!+ e o Qltimo ar4umento 6 o endere5o de
mem:ria de uma .ari;.el do tipo DAOND 8ue #eria o pid da thread+ para finali)ar atribuimo# a
fun52o para uma .ari;.el do tipo I"NDLE para poder manipular mai# tarde
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
printf(^proe##o filhoVn^!Z
b
int main(.oid!
a
DAOND pidZ
I"NDLE filhoZ
printf(^proe##o paiVn^!Z
filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z
return ,Z
b
para e.itar 8ue o thread pai #e finali)e ante# do filho podemo# u#ar a "?I AaitForCin4leOb3et no
final do odi4o+ nela pa##amo# omo ar4umento a .aria.el do tipo I"NDLE e a on#tante
INFINI@E ou tempo em mil6#imo#
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
printf(^proe##o filhoVn^!Z
b
int main(.oid!
a
DAOND pidZ
I"NDLE filhoZ
printf(^proe##o paiVn^!Z
filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z
AaitForCin4leOb3et(filho+INFINI@E!Z
return ,Z
b
?odemo# iniiar a thread pau#ada u#ando a on#tante CNE"@EiC<C?ENDED+ e podemo# iniiar
om a "?I Ne#ume@hread nela pa##amo# omo ar4umento a .aria.el I"NDLE
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
printf(^proe##o filhoVn^!Z
b
int main(.oid!
a
DAOND pidZ
I"NDLE filhoZ
printf(^proe##o paiVn^!Z
filho g Create@hread(,+,+
(L?@INE"DiC@"N@iNO<@INE!ft#+,+CNE"@EiC<C?ENDED+Ypid!Z
Ne#ume@hread(filho!Z
AaitForCin4leOb3et(filho+INFINI@E!Z
return ,Z
b
tamb6m poder7amo# pau#ar uma thread om a "?I Cu#pend@hread+ para u#ar ela ba#ta pa##ar omo
ar4umento a .aria.el I"NDLE da thread
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
'hile(%!
a
printf(^loop infinito W.] ^!Z
b
b
int main(.oid!
a
DAOND pidZ
I"NDLE filhoZ
filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z
#leep(/,,,!Z
Cu#pend@hread(filho!Z
AaitForCin4leOb3et(filho+INFINI@E!Z
return ,Z
b
para finali)ar uma thread podemo# u#ar E*it@hread dentro dela e pa##amo# omo ar4umento o
retorno
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
int eof g ,Z
'hile(%!
a
if(eof Wg %,!
a
E*it@hread(,!Z
b
printf(^loop g hd^+eof!Z
eof++Z
b
b
int main(.oid!
a
DAOND pidZ
I"NDLE filhoZ
filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z
AaitForCin4leOb3et(filho+INFINI@E!Z
return ,Z
b
poder7amo# finali)ar a thread filho pela thread pai om a fun52o @erminate@hread nela pa##amo#
omo ar4umento o handle da thread #e4uido do .alor de retorno
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
'hile(%!
a
printf(^loop infinito W.] ^!Z
b
b
int main(.oid!
a
DAOND pidZ
I"NDLE filhoZ
filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z
@erminate@hread(filho+,!Z
AaitForCin4leOb3et(filho+INFINI@E!Z
return ,Z
b
om a "?I (etCurrent@hread ela retorna o handle da thread atual
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
I"NDLE filhoZ
.oid ft#(.oid!
a
filho g (etCurrent@hread(!Z
b
int main(.oid!
a
DAOND pidZ
Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z
@erminate@hread(filho+,!Z
AaitForCin4leOb3et(filho+INFINI@E!Z
return ,Z
b
8uando temo# mai# de uma thread u#ar a "?I AaitForCin4leOb3et n2o funionaria muito bem
ent2o temo# 8ue u#ar a "?I AaitForBultipleOb3et#+ o u#o de##a a "?I 6 um pouo diferente da
outra por6m #eu ob3eti.o 6 o me#mo+ na# .aria.ei# I"NDLE e DAOND riamo# uma arraM para
arma)enar amba# thread#+ e na "?I AaitForBultipleOb3et# pa##amo# omo ar4umento a
8uantidade de thread#+ a arraM om a handle da# thread#+ @N<E ou F"LCE para e#perar toda# a#
thread# finali)ar para ontinuar+ e o tempo de e#pera (podemo# u#ar a on#tante INFINI@E!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
.oid ft#(.oid!
a
printf(^thread ft#Vn^!Z
b
.oid hak(.oid!
a
printf(^thread hakVn^!Z
b
int main(.oid!
a
I"NDLE filho[%,\Z
DAOND pid[%,\Z
filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z
filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z
AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z
return ,Z
b
no :di4o aima podemo# .er 8ue amba# a# thread# .ai mo#tra al4o na tela porem #e amba# thread#
tentar mo#tra al4o na tela ao me#mo tempo i##o .ai impedir 8ue uma mo#tre (i##o 6 bu4 muito
omum onheido omo deadlok!+ para e.ita i##o podemo# u#ar mute* 8ue .ai dei*ar apena# um
e.ento por .e) parando o# demai#+ para a 4ente riar um mute* temo# 8ue riar uma .aria.el do
tipo I"NDLE para atribuir ele e u#ar a "?I CreateBute*+ pa##amo# omo ar4umento para e##a api
o atributo de #e4uran5a (podemo# oloar ,!+ @N<E ou F"LCE para ome5ar om mute* parado+ 6
o nome (podemo# oloar , tambem!+ e no ome5o de ada thread u#amo# a "?I
AaitForCin4leOb3et pa##amo# omo ar4umento o handle do mute* e on#tante INFINI@E i##o .ai
pau#ar o# demai# e.ento#+ e no final da thread oloamo# a "?I Nelea#eBute* om o ar4umento
handle do mute* i##o .ai ontinuar o e.ento
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
I"NDLE eofZ
.oid ft#(.oid!
a
AaitForCin4leOb3et(eof+INFINI@E!Z
printf(^thread ft#Vn^!Z
Nelea#eBute*(eof!Z
b
.oid hak(.oid!
a
AaitForCin4leOb3et(eof+INFINI@E!Z
printf(^thread hakVn^!Z
Nelea#eBute*(eof!Z
b
int main(.oid!
a
I"NDLE filho[%,\Z
DAOND pid[%,\Z
eof g CreateBute*(,+F"LCE+,!Z
filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z
filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z
AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z
return ,Z
b
a#o iniiamo# o .alor @N<E em CreateBute* podemo# iniar om a pr:pria "?I Nelea#eBute*
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
I"NDLE eofZ
.oid ft#(.oid!
a
AaitForCin4leOb3et(eof+INFINI@E!Z
printf(^thread ft#Vn^!Z
Nelea#eBute*(eof!Z
b
.oid hak(.oid!
a
AaitForCin4leOb3et(eof+INFINI@E!Z
printf(^thread hakVn^!Z
Nelea#eBute*(eof!Z
b
int main(.oid!
a
I"NDLE filho[%,\Z
DAOND pid[%,\Z
eof g CreateBute*(,+@N<E+,!Z
Nelea#eBute*(eof!Z
filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z
filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z
AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z
return ,Z
b
al6m do mute* podemo# u#ar #em;foro# 8ue #eria uma forma mai# or4ani)ada de e*euta thread#
e.itando deadlok+ diferente do mute* 8ue 6 a primeira thread a #er e*eutada pau#a a# demai# o
#em;foro #e4ue uma ordem num6ria 8ue 6 inrementada ou derementado a ada final a##im
e*eutando a outra thread+ todo #em;foro tem um nQmero iniial 8ue ome5a no , e o numero final
(8uando he4a no nQmero final .olta para o nQmero iniial e ome5a a ordem de no.o e apena#
e*euta 8uantidade de thread# e8ui.alente ao nQmero final!+ para riar um #em;foro u#amo# a "?I
CreateCemaphore pa##amo# omo ar4umento o atributo de #e4unra5a (oloamo# ,!+ o numero
ma*imo do ontado para iniiar+ o nQmero ma*imo de thread# no #emaforo+ e o nome (i##o opional
pode oloar , a8ui tamb6m! e atribuimo# para uma .aria.el do tipo I"NDLE+ dentro de ada
thread u#amo# o AaitForCin4leOb3et pa##amo# omo ar4umento para ele o handle do #emaforo e a
on#tante INFINI@E+ e no final dele u#amo# a "?I Nelea#eCemaphore+ o# ar4umento# dela #2o+
handle do #emaforo+ a 8uantidade de inremento+ a Qltima po#i52o (i##o 6 opional podemo# oloar
um ,!
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
I"NDLE eofZ
.oid ft#(.oid!
a
AaitForCin4leOb3et(eof+INFINI@E!Z
printf(^thread ft#Vn^!Z
Nelea#eCemaphore(eof+%+,!Z
b
.oid hak(.oid!
a
AaitForCin4leOb3et(eof+INFINI@E!Z
printf(^thread hakVn^!Z
Nelea#eCemaphore(eof+%+,!Z
b
int main(.oid!
a
I"NDLE filho[%,\Z
DAOND pid[%,\Z
eof g CreateCemaphore(,+/+/+,!Z
Nelea#eBute*(eof!Z
filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z
filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z
AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z
return ,Z
b
D.1 E8I Linu(
O #i#tema linu* tem mai# "?I# do 8ue o #i#tema 'indo'# i##o de.ido o kernel do linu* #er todo
feito pela lin4ua4em C e o linu* 6 open#oure (todo# podem u#ar+ modifiar e di#tribuir da maneira
8ue de#e3ar! diferente do 'indo'#+ a# "?I# do 'indo'# e#t2o em DLL# no linu* e#tao em
bibliotea header ou lib do pr:prio #i#tema+ no linu* .oL pode manipular ate o kernel diferente do
'indo'# 8ue .oL u#a #uperfiialmente+ 8uando in#tala al4un# pro4rama# no linu* o#tuma in#talar
tamb6m no.a# bibliotea# no #i#tema operaional i##o permite no.a# "?I# para brinar+ a primeira
"?I 8ue .amo# .er para o #i#tema linu* #er; o mkdir para riar diretorio nele pa##amo# omo
ar4umento o nome do diret:rio 8ue #era riado
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
mkdir(^hft#$%&^!Z
return ,Z
b
para remo.er diretorio podemo# u#ar a "?I rmdir pa##amo# omo ar4umento o diretorio
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
rmdir(^hft#$%&^!Z
return ,Z
b
para riar um ar8ui.o podemo# u#ar a "?I reat pa##amo# omo ar4umento o nome do ar8ui.o
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
reat(^ft#.t*t^!Z
return ,Z
b
podemo# u#ar "?I ae## para .er o tipo de ae##o de um ar8ui.o em uma ondi52o if+ o#
ar4umento# da "?I 6 o ar8ui.o e tipo 8ue poderia #er a# on#tante# NiOR para leitura+ AiOR para
e#rita+ eiOR para e*eu52o+ e FiOR para .er #e o ar8ui.o e*i#te
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
if(ae##(^ft#.t*t^+FiOR!!
a
reat(^ft#.t*t^!Z
b
return ,Z
b
para riar um hard link de um ar8ui.o ou diretorio u#amo# a "?I link #e4uida do ar8ui.o da onde
#era riado e o nome do link
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
link(^ft#.t*t^+^link.t*t^!Z
return ,Z
b
para riar um link #imb:lio u#amo# a "?I #Mmlink o u#o dela 6 o me#mo 8ue anterior+ a diferen5a
entre o# doi# 8ue o hard link 4era um ar8ui.o apontando para o me#mo inode ent2o me#mo #e
apa4ar um do# ar8ui.o ainda fia la+ 3; o link #imb:lio #2o pareido om o# do 'indo'# ou #e3a #e
apa4ar o ar8ui.o o link fia 8uebrado
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
#Mmlink(^ft#.t*t^+^link.t*t^!Z
return ,Z
b
podemo# u#ar "?I 4et'd para .er o diret:rio atual+ pa##amo# omo ar4umento uma arraM do tipo
har e o tamanho dela
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
har hak[$,,\Z
4et'd(hak+$,,!Z
printf(^h#^+hak!Z
return ,Z
b
podemo# riar um #ubproe##o om a "?I fork+ ela n2o tem ar4umento# apena# atribuir ela para
uma .ari;.el do tipo pidit
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
pidit ft# g fork(!Z
return ,Z
b
a4ora u#amo# um ondi52o if e omparamo# a8uela .ari;.el om o .alor ,+ dentro da e#trutura if
oloamo# a# fun59e# 8ue #er2o e*eutada pelo proe##o filho (a odin52o if de.e #er riada depoi#
do fork por8ue #e n2o tanto o proe##o pai 8uanto filha .2o e*eutar o# :di4o# dua# ou mai# .e)e#!
Oinlude ]#tdio.hW
Oinlude ]uni#td.hW
int main(.oid!
a
pidit ft# g fork(!Z
if(ft# gg ,!
a
printf(^proe##o filhoVn^!Z
b
return ,Z
b
para e.itar 8ue o proe##o filho e*eute fora do e#opo u#amo# a fun52o e*it da bibliotea #tdlib.h
para finali);>lo
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]uni#td.hW
int main(.oid!
a
pidit ft# g fork(!Z
if(ft# gg ,!
a
printf(^proe##o filhoVn^!Z
e*it(,!Z
b
printf(^proe##o paiVn^!Z
return ,Z
b
podemo# u#ar a "?I 4etpid para pe4ar o pid atual
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]uni#td.hW
int main(.oid!
a
pidit ft# g fork(!Z
if(ft# gg ,!
a
printf(^proe##o filho: hd Vn^+4etpid(!!Z
e*it(,!Z
b
printf(^proe##o pai: hd Vn^+4etpid(!!Z
return ,Z
b
?odemo# u#ar "?I kill da bibliotea #i4nal.h para finali)ar determinado proe##o ou #ubproe##o+ o#
ar4umento# dela #2o o pid #e4uido do #i4nal ode
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
Oinlude ]uni#td.hW
Oinlude ]#i4nal.hW
int main(.oid!
a
pidit ft# g fork(!Z
if(ft# gg ,!
a
pidit hak g 4etpid(!Z
printf(^proe##o filho: hd Vn^+hak!Z
kill(hak+1!Z
b
printf(^proe##o pai: hd Vn^+4etpid(!!Z
return ,Z
b
D.! E8I *ocBet /&indo's e Linu(0
O u#o de #oket# permite doi# ou mai# omputadore# #e omuni8uem tanto em rede loal uma lan
ou uma rede remoto a internet+ o #i#tema linu* foi riado para #er u#ado em rede dei# do iniio 3; o
#i#tema 'indo'# #: depoi# do 'indo'# 1& ent2o o linu* 8uando #e trata de rede 6 mil .e)e# melhor
8ue o #i#tema 'indo'# e tamb6m mai# r;pido+ a omunia52o entre dua# ma8uina# 6 u#ado di.er#o#
protoolo# para intera4ir de maneira orreta entre ela# (e todo# o# demai# protoolo# #e4ue um
Qnio padrao ou ar8uitetura 8ue nada mai# nada meno# 8ue um protoolo para o# outro# protoolo
U>U !+ o# #oket# #2o um meio de omunia52o entre uma one*2o e e*i#tem pelo meno# doi# #oket#
em uma one*2o+ 8ue #eria o #oket #er.idor e o #oket liente+ ambo# o# #oket# #2o onfi4urado
para ambo# #oket# #2o onfi4urado para aeitar ou onetar a determinado I? ou porta (o ip nada
mai# 6 8ue um protoolo de endere5amento!+ o #oket #er.idor .ai fiar e#perando uma one*2o em
determinado porta e #oket liente .ai #er onetar ao I? da ma8uina na8uela porta #e a one*ao for
um #ue##o amba# a# ma8uina poder2o #e omuniar (independente #e a ma8uina 6 o liente ou
#er.idor poder; en.iar e reeber dado#+ embora omo e##e# dado# 6 proe##ado em ambo# #oket#
i##o depende da onfi4ura52o e da pro4rama52o do liente e #er.idor!+ no 'indo'# 6 nee##ario
iniiar um #er.i5o hamado AC" para poder u#ar #oket e tamb6m de.e inluir a lib '#ok$/ para
ompilar e a# bibliotea para u#ar #oket na lin4ua4em /++ 6 o J'in#ok.hK e J'in#ok/.hK
(reomendo u#ar 'in#ok/.h #e #eu 'indo'# for aima do 1H!+ 3; no #i#tema linu* n2o 6 nee##ario
inluir nenhuma lib ou iniiar #er.i5o porem o u#o de bibliotea e bem e*ten#o #endo ela#
J#M#/#oket.hK+ J#M#/tMpe#.hK+ Jnetdb.hK+ Jarpa/inet.hK+ Jnetinet/in.hK entre outra#+ para iniiar o
#er.i5o AC" no 'indo'# riamo# uma .aria.el do tipo AC"D"@" e DAOND+ na .aria.el
DAOND atribuimo# uma "?I 8ue #eria o B"REAOND da bibliotea 'indo'#.h ne##a api
pa##amo# omo ar4umento / e , (i##o #eria a .er#ao!+ por fim u#amo# a "?I AC"Ctartup pa##amo#
omo ar4umento para ela a .aria.el DAOND e o endere5o de memoria da .aria.el AC"D"@"
Oinlude ]#tdio.hW
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
int main(.oid!
a
AC"D"@" #er.ioZ
DAOND .er#ao g B"REAOND(/+,!Z
AC"Ctartup(.er#ao+Y#er.io!Z
return ,Z
b
#: lembrando para opilar no 'indo'# 6 nee##;rio delarar a lib '#ok$/
C:V<#er#Vft#$%&VDe#ktopW 4 ft#. >o hak >l '#ok$/
omo dito ante# a maioria da# "?I de #oket# do #i#tema 'indo'# e#ta na bibliotea 'in#ok/.h no
linu* e#ta em .aria# bibliotea# para n2o oorrer onflito e para o :di4o fiar ae##7.el para o# doi#
#i#tema# operaionai# reomendo u#ar a direti.a Oifdef
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
return ,Z
b
a4ora riamo# o #oket om a "?I #oket (e##a "?I e#ta na bibliotea #M#/#oket.h no linu*!+
pa##amo# omo ar4umento para ela a ar8uitetura ou familM do #oket 8ue no a#o u#aremo#
"FiINE@ (e*i#tem outra# porem e##a 6 a mai# u#ada atualmente!+ o tipo de #oket
(COCRiC@NE"B u#ado para tp+ COCRiD(N"B u#ado para udp e COCRiN"A!+ e por fim o
protoolo 8ue podemo# u#ar al4uma# on#tante# #: temo# 8ue delarar a bibliotea netdb.h no linu*
para i##o (I??NO@Oi@C? para protoolo tp+ I??NO@Oi<D? para protoolo udp+
I??NO@OiICB? para protoolo imp entre outro#!+ tamb6m atribu7mo# a "?I para uma .aria.el do
tipo int
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
Oifdef AIN$/
Oendif
return ,Z
b
podemo# fehar um #oket om a "?I lo#e#oket do 'indo'# ou a "?I lo#e no linu* (no a#o
tambem olo8uei uma direti.a Oifdef
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
a4ora .em a parte 8ue onfi4uramo# o #oket para #er #er.idor ou liente+ no a#o do liente e
nee##ario u#ar a "?I onnet e a #trut #okaddriin para onfi4urar o ip e porta onde .ai #e
onetar+ no a#o do #er.idor 6 nee##ario u#ar a "?I bind+ li#ten e aept e dua# e#trutra#
#okaddriin e mai# dua# .aria.ei# do tipo int+ primeiro .amo# aprender a fa)er o liente de.ido ele
#er o mai# fail+ para ome5ar riamo# a e#trutura #okaddriin onde .amo# onfi4urar o ip e a porta
onde ele .ai #e onetar+ no atributo do #okaddriin oloamo# #inifamilM e a me#ma ar8uitetura do
#oket+ em #iniaddr.#iaddr u#amo# a "?I inetiaddr e pa##amo# omo ar4umento para ela o ip da
ma8uina onde .ai onetar+ e por #iniport atribumo# a "?I hton# e pa##amo# o numero da porta
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
#trut #okaddriin remotoZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
remoto.#inifamilM g "FiINE@Z
remoto.#iniaddr.#iaddr g inetiaddr(^%/0.,.,.%^!Z
remoto.#iniport g hton#(H,!Z
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
a4ora u#amo# a "?I onnet para onetar+ pa##amo# omo ar4umento para ela a .aria.el 8ue tem o
#oket+ o endere5o de memoria da #trut om o ip onde .ai #e onetar (tambem de.e u#ar tMpea#t
para J#trut #okaddr dK !+ e o tamanho da #trut om o ip onde .ai #e onetar (u#amo# a fun52o
#i)eof!+ pronto #e der tudo erto ele #e onetaria na8uele ip e porta
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
#trut #okaddriin remotoZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
remoto.#inifamilM g "FiINE@Z
remoto.#iniaddr.#iaddr g inetiaddr(^%/0.,.,.%^!Z
remoto.#iniport g hton#(H,!Z
onnet(#ok+(#trut #okaddr d!Yremoto+#i)eof(remoto!!Z
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
depoi# de onetado 6 #: en.iar ou reeber o# dado# om a "?I #end para en.iar e a "?I re. para
reeber+ o# ar4umento# de amba# a# "?I# #2o o #oket+ a arraM do tipo har 8ue .ai #er en.iado ou
#era arma)enada+ o tamanho do dado en.iado ou reebido+ e a fla4 8ue podemo# oloar ,+ o# dado#
en.iado ou reebido depende do #er.idor e a 8uantidade de dado# en.iado ou reebido om uma
ordem ou #e o #er.idor e liente fia pre#o em um loop infinito e#perando no.o# men#a4em para
en.iar ou reeber i##o depende do #er.idor e utilidade dele+ um e*emplo o# #er.idore# http #e
reeber uma re8ui#i52o do tipo J4et / http/VnVnK ele# en.ia a pa4ina html
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
#trut #okaddriin remotoZ
har ft#[$\Z
har dado[\ g ^4et / http/VnVn^Z
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
remoto.#inifamilM g "FiINE@Z
remoto.#iniaddr.#iaddr g inetiaddr(^%/0.,.,.%^!Z
remoto.#iniport g hton#(H,!Z
onnet(#ok+(#trut #okaddr d!Yremoto+#i)eof(remoto!!Z
#end(#ok+dado+#trlen(dado!+,!Z
'hile(re.(#ok+ft#+%+,!!
a
printf(^h^+ft#[,\!Z
b
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
para riar um #oket #er.idor prei#amo# riar pelo meno# dua# #trut #okaddriin uma #era a
e#trutura da onfi4ura52o do pr:prio #er.idor omo a porta onde o# liente# .2o onetar+ o outro
#era a# onfi4ura52o do liente 8ue onetar+ tambem e nee##ario riar dua# no.a# .aria.ei# do tipo
int uma .ai #er o no.o #oket e a outra o tamanho da e#trutura+ para ome5ar .amo# onfi4urar a
#trut #okaddriin do #er.idor 8ue eu hamei de loal+ no #inifamilM tambem oloamo# a
ar8uitetura do #oket+ na porta fa)emo# a me#ma oi#a (6 reomendado u#ar porta# alta# aima de
%,/E de.ido a# porta# bai*a #er porta# padrao!+ no #iniaddr.#iaddr u#amo# IN"DDNi"N_
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #ok+ #ok/+ tamZ
#trut #okaddriin loal+ remotoZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
loal.#inifamilM g "FiINE@Z
loal.#iniaddr.#iaddr g IN"DDNi"N_Z
loal.#iniport g hton#(%,$%&!Z
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
a4ora u#amo# o bind 8ue #eria e8ui.alente ao onnet o# ar4umento# tamb6m #2o i4uai#+ depoi#
u#amo# li#ten i##o permite oloar a 8uantidade ma*ima de one*ao na8uele #oket+ o# ar4umento
#2o o #oket e 8uantidade
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #ok+ #ok/+ tamZ
#trut #okaddriin loal+ remotoZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
loal.#inifamilM g "FiINE@Z
loal.#iniaddr.#iaddr g IN"DDNi"N_Z
loal.#iniport g hton#(%,$%&!Z
bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z
li#ten(#ok+%!Z
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
para terminar u#amo# aept dentro de um la5o 'hile para e#perar e permitir a one*2o+ o#
ar4umento# #2o o #oket+ o endere5o de memoria da outra #trut #okaddriin+ e o endere5o de
memoria da .aria.el int 8ue .ai arma)enar o tamanho+ e por fim atribu7mo# e##a "?I para outra
.ari;.el int 8ue #era o outro #oket
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #ok+ #ok/+ tamZ
#trut #okaddriin loal+ remotoZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
loal.#inifamilM g "FiINE@Z
loal.#iniaddr.#iaddr g IN"DDNi"N_Z
loal.#iniport g hton#(%,$%&!Z
bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z
li#ten(#ok+%!Z
'hile(#ok/ g aept(#ok+(#trut #okaddr d!Yremoto+Ytam!!
a
b
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
depoi# e #: en.iar ou reeber o# dado# om o #end e re.+ no a#o meu #er.idor .ai en.iar a hora e
de#onetar a8uele o #oket apena# o #oket do liente
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
Oinlude ]time.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #ok+ #ok/+ tamZ
#trut #okaddriin loal+ remotoZ
timeit tempo g time(N<LL!Z
#trut tm dft#Z
har hora[%,,\Z
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
loal.#inifamilM g "FiINE@Z
loal.#iniaddr.#iaddr g IN"DDNi"N_Z
loal.#iniport g hton#(%,$%&!Z
bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z
li#ten(#ok+%!Z
'hile(#ok/ g aept(#ok+(#trut #okaddr d!Yremoto+Ytam!!
a
ft# g loaltime(Ytempo!Z
#printf(hora+^hd:hd^+ft#>Wtmihour+ft#>Wtmimin!Z
#end(#ok/+hora+#trlen(hora!+,!Z
Oifdef AIN$/
lo#e#oket(#ok/!Z
b
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok/!Z
b
lo#e(#ok!Z
Oendif
return ,Z
b
para pe4ar .er o ip do #oket liente ba#ta u#ar a "?I inetintoa e pa##ar o atributo #iniaddr da
e#trutura #okaddriin do #oket liente
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
Oinlude ]time.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #ok+ #ok/+ tamZ
#trut #okaddriin loal+ remotoZ
timeit tempo g time(N<LL!Z
#trut tm dft#Z
har hora[%,,\Z
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
loal.#inifamilM g "FiINE@Z
loal.#iniaddr.#iaddr g IN"DDNi"N_Z
loal.#iniport g hton#(%,$%&!Z
bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z
li#ten(#ok+%!Z
'hile(#ok/ g aept(#ok+(#trut #okaddr d!Yremoto+Ytam!!
a
ft# g loaltime(Ytempo!Z
#printf(hora+^hd:hd^+ft#>Wtmihour+ft#>Wtmimin!Z
#end(#ok/+hora+#trlen(hora!+,!Z
printf(^ip do #oket liente: h#Vn^+inetintoa(remoto.#iniaddr!!Z
Oifdef AIN$/
lo#e#oket(#ok/!Z
b
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok/!Z
b
lo#e(#ok!Z
Oendif
return ,Z
b
no# odi4o# anteriore# e#tamo# u#ando apena# o I? para #e onetar a um ho#t ou dom7nio temo#
8ue on.erter e##e dn# para o ip+ para fa)er i##o podemo# u#ar 4etho#tbMname e atribuir ela para um
ponteiro de uma e#trutura ho#tent
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
#trut ho#tent dho#tZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
ho#t g 4etho#tbMname(^loalho#t^!Z
printf(^h#^+inetintoa((#trut iniaddr!ho#t>Whiaddr!!Z
return ,Z
b
depoi# #: on.erter o ip para #trin4 u#ando inetintoa+ pa##amo# omo ar4umento a#teri#o e abre e
feha parLnte#e# e la dentro o atributo hiaddr da e#trutra ho#tent (tambem u#amo# tMpea#t J#trut
iniaddr dK!
Oinlude ]#tdio.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
#trut ho#tent dho#tZ
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
ho#t g 4etho#tbMname(^loalho#t^!Z
printf(^h#^+inetintoa(d((#trut iniaddr d!ho#t>Whiaddr!!!Z
return ,Z
b
outro e*emplo #eria e##e om #oket liente 8ue oneta.a ao #er.idor http 8ue tinha feito
anteriormente
Oinlude ]#tdio.hW
Oinlude ]#trin4.hW
Oifdef AIN$/
Oinlude ]'indo'#.hW
Oinlude ]'in#ok/.hW
Oel#e
Oinlude ]uni#td.hW
Oinlude ]#M#/tMpe#.hW
Oinlude ]#M#/#oket.hW
Oinlude ]netdb.hW
Oinlude ]arpa/inet.hW
Oinlude ]netinet/in.hW
Oendif
int main(.oid!
a
int #okZ
#trut #okaddriin remotoZ
#trut ho#tent dho#tZ
har ft#[$\Z
har dado[\ g ^4et / http/VnVn^Z
Oifdef AIN$/
AC"D"@" #er.ioZ
DAOND .er#aoZ
AC"Ctartup(.er#ao+Y#er.io!Z
Oendif
#ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z
ho#t g 4etho#tbMname(^loalho#t^!Z
remoto.#inifamilM g "FiINE@Z
remoto.#iniaddr.#iaddr g inetiaddr(inetintoa(d((#trut iniaddr d!ho#t>Whiaddr!!!Z
remoto.#iniport g hton#(H,!Z
onnet(#ok+(#trut #okaddr d!Yremoto+#i)eof(remoto!!Z
#end(#ok+dado+#trlen(dado!+,!Z
'hile(re.(#ok+ft#+%+,!!
a
printf(^h^+ft#[,\!Z
b
Oifdef AIN$/
lo#e#oket(#ok!Z
Oel#e
lo#e(#ok!Z
Oendif
return ,Z
b
10.0 C#I
@amb6m 6 po##7.el u#ar a lin4ua4em C/C++ para u#o 'eb omo 4i+ para u#ar e##e# e*eut;.ei#
para u#o 'eb e nee##;rio um #er.idor http onfi4urado para u#o de 4i+ a #a7da de dado# do
e*euta.el 6 redireionado para o #er.idor 'eb e a entrada de dado# para o e*euta.el #2o pela#
.aria.ei# de ambiente do e*euta.el 8ue no a#o poderia #er por um formulario i4ual a lin4ua4em
?I? (metodo (E@ e ?OC@!+ tamb6m 6 nee##;rio na primeira #aida de dado# u#ar header para o
#er.idor e de depoi# dua# 8uebra# de linha# #e4uida do odi4o html (tambem 6 nee##ario troar a
e*ten#ao do e*euta.el para .4i!
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^Content>@Mpe: te*t/htmlVnVn^!Z
printf(^]htmlW]headW]/headW]bodMWpa4ina 'eb]/bodMW]/htmlW^!Z
return ,Z
b
.oL tamb6m poderia u#ar ## e 3a.a#ript i##o por8ue e##a# dua# lin4ua4en# #2o e*eutada# no
na.e4ador e n2o no #er.idor (lient>#ide!
Oinlude ]#tdio.hW
int main(.oid!
a
printf(^Content>@Mpe: te*t/htmlVnVn^!Z
printf(^]htmlW]headW^!Z
printf(^]#tMle tMpegV^te*t/##V^WbodMabak4round>olor: blakZ olor: 'hiteb]/#tMleW^!Z
printf(^]#ript tMpegV^te*t/3a.a#riptV^Walert(V^#e3a bem .indoV^!Z]/#riptW]/headW^!Z
printf(^]bodMWbM hft#$%&]/bodMW]/htmlW^!Z
return ,Z
b
tamb6m podemo# u#ar .ari;.ei# e fun59e# da lin4ua4em C/C++ para dei*ar mai# din=mio
Oinlude ]#tdio.hW
Oinlude ]time.hW
int main(.oid!
a
#trut tm dft#Z
timeit tempo g time(N<LL!Z
ft# g loaltime(Ytempo!Z
printf(^Content>@Mpe: te*t/htmlVnVn^!Z
printf(^]htmlW]bodMWhora atual: hd:hd]/bodMW]/htmlW^+ft#>Wtmihour+ft#>Wtmimin!Z
return ,Z
b
para pe4ar informa52o do #er.idor omo I? ou ate a pa##a4em de ar4umento omo (E@ e ?OC@
podemo# u#ar a fun52o 4eten. da bibliotea #tdlib.h+ pa##amo# omo ar4umento o nome da .aria.el
de ambiente (NEBO@Ei"DDN para o ip de 8uem oneto+ I@@?i<CENi"(EN@ para o a4ente+
S<EN_iC@NIN( para pe4ar a pa##a4em de formulario do metodo 4et n2o formatada+
I@@?iCOORIE para o# ookie# entre outra#!
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(!
a
har dip+ da4ente+ dar4umento+ dookieZ
ip g 4eten.(^NEBO@Ei"DDN^!Z
a4ente g 4eten.(^I@@?i<CENi"(EN@^!Z
ar4umento g 4eten.(^S<EN_iC@NIN(^!Z
ookie g 4eten.(^I@@?iCOORIE^!Z
printf(^Content>@Mpe: te*t/htmlVnVn^!Z
printf(^]htmlW]headW]/headW]bodMW^!Z
printf(^#eu I?: h# ]brW^+ip!Z
printf(^#eu a4ente: h# ]brW^+a4ente!Z
printf(^pa##a4em: h#]brW^+ar4umento!Z
printf(^ookie: h#]brW^+ookie!Z
printf(^]/bodMW]/htmlW^!Z
return ,Z
b
para adiionar um ookie podemo# u#ar a header JCet>Cookie: J #e4uido do ookie
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(!
a
har dookieZ
ookie g 4eten.(^I@@?iCOORIE^!Z
printf(^Content>@Mpe: te*t/htmlVn^!Z
printf(^Cet>Cookie: ft#g$%&VnVn^!Z
printf(^]htmlW]headW]/headW]bodMW^!Z
printf(^ookie#: h# ]brW^+ookie!Z
printf(^]/bodMW]/htmlW^!Z
return ,Z
b
para redireionar u#amo# a header JLoation: K #e4uido da url
Oinlude ]#tdio.hW
Oinlude ]#tdlib.hW
int main(.oid!
a
printf(^Content>@Mpe: te*t/htmlVn^!Z
printf(^Loation: http://endoffile.umforum.netVnVn^!Z
printf(^]htmlW]headW]/headW]bodMW]/bodMW]/htmlW^!Z
return ,Z
b
10.1 @ E*)
" lin4ua4em a##emblM 6 uma lin4ua4em de bai*o n7.el tambem 6 on#iderada uma da# mai# dif7il
de aprender omparada a# outra# lin4ua4en# de pro4rama52o por au#a da #inta*e dela+ a #inta*e
dela pode .ariar de ompilador+ #i#tema operaional ou ate proe##ador+ a# #inta*e# mai# u#ada#
de##a lin4ua4em pelo meno# eu aho 6 a IN@EL e "@Y@+ a #inta*e IN@EL #2o di.idida# por E
parte# 8ue 6 o label (o label 6 opional na maioria da# .e)e#!+ a opera52o 8ue #er; feita (ou opode!+
onde #er; atribu7do depoi# um .ir4ula para #eparar e o .alor 8ue #er; atribu7do+ 3; na #inta*e "@Y@
6 in.ertido a parte onde #er; atribu7do e o .alor
intel: opera52o onde + .alor
atYt: opere52o .alor + onde
a lin4ua4em a##emblM diferente da# demai# lin4ua4en# 6 apena# uma pe8uena on.er#ao de odi4o#
para lin4ua4em da ma8uina (um e*emplo 6 a opera52o nop 8ue 6 nada mai# 8ue o odi4o
he*adeimal ,*1,!+ por ela #er uma pe8uena on.er#2o o e*euta.el fia mil .e)e# menor do 8ue
um e*euta.el de outra lin4ua4em por6m a #oure fia muito maior e tem muito mai# hane de te
al4um erro nela+ o proe##ador do omputador tem uma memoria interna hamada re4i#trador
diferente da memoria N"B o# re4i#tradore# 6 muito mai# rapido por6m 6 limitado a 8uantidade e
e#pa5o+ e*i#tem E re4i#tradore# padr9e# 8ue podemo# u#ar para arma)enar dado# #2o ele# JaK+ JbK+
JK e JdK e##e E re4i#tradore# podem #e di.idi por / re4i#tradore# #endo ada um H bMte#+ 8ue #eria
o bMte alto JahK+ JbhK+ JhK+ JdhK+ e o bMte bai*o JalK+ JblK+ JlK+ JdlK+ e ada re4i#trador de Hbit#
pode arma)enar e*atamente um .alor de , a /&&+ o# doi# re4i#tradore# de Hbit# 3unto# 4era um
re4i#trador total de %Gbit# 8ue tem um J*K no final #ub#i#tido o JhK e o JlK 8ue #eria o Ja*K+ Jb*K+
J*K+ Jd*K e pode 4uardar um .alor de , a G&&$&+ um re4i#trador JahK om .alor ,$ e o re4i#trador
al om .alor %& #eria e8ui.alente ao re4i#trado a* om o .alor ,$%& (pode #er 8ue o .alor formado
n2o #e3a e##e ,$%& e #im %&,$ dependendo do proe##ador+ tambem nao #er; o numero em deimal
,$%& e #im o numero 0H$!+ e a maneira de omo o proe##ador .ai ler o .alor i##o depende de omo
e#tamo# u#ado o re4i#trador #e for Ja*K ele ia ler ,$%& ou JahK ia ler apena# o ,$+ al6m de##e#
re4i#tradore# de %GbMte# e*i#tem o de $/ e GE bMte# 8ue #2o o# mai# u#ado# atualmente no# #i#tema#
operaionai#+ o# re4i#tradore# de $/ bMte# tem a letra JeK na frente Jea*K+Keb*K+Ke*K+Ked*K e o#
GEbMte# a letra JrK #endo ele# Jra*K+Krb*K+Kr*K+Krd*K
%G (H! $/ GE
a* (ah + al! ea* ra*
eu n2o .ou en#inar a pro4rama em a##emblM puro a8ui #: .ou en#inar apena# o ba#io de a#m
inline+ ou #e3a u#ar a#m dentro da pr:pria lin4ua4em C/C+++ para ome5ar u#amo# a fun52o a#m
#e4uido do ar4umento 8ue nada mai# 6 8ue uma #trin4 om o odi4o a#m
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^^!Z
return ,Z
b
a primeira opera52o ou opode 8ue .amo# aprender #er; o JnopK itado anteriormente+ e##e opode
n2o fa) nada 8uando o pro4rama he4a ne##a parte ele #imple#mente pula ela
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^nop^!Z
return ,Z
b
podemo# fa)er outro# opode# #eparado# por ponto e .7r4ula (ponto e .ir4ula na lin4ua4em
a##emblM pura 6 o oment;rio por6m no a#m inline da lin4ua4em /++ #eria e8ui.alente a uma
8uebra de linha!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^nop Z nop^!Z
return ,Z
b
tamb6m podemo# u#ar VrVn para 8uebra de linha
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^nop VrVn nop^!Z
return ,Z
b
por preferLnia para manter o odi4o or4ani)ado fa5a de##a maneira
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^nop Z^
^nop^!Z
return ,Z
b
o# label #er.e para loali)ar+ hamar ou pular para determinada parte do odi4o e ele# #empre tem
doi# ponto# no final+ o# label podem #er riado ante# de um opode de##a maneira
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^ft#: nop^!Z
return ,Z
b

ou #o)inho de##e 3eito
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^ft#:^!Z
return ,Z
b
o# re4i#tradore# de.e #er oloado um #7mbolo de porenta4em ante# por e*emplo o re4i#trador
ha*+ e o# numero# u#ado o #7mbolo de ifrao ante# X$%& (o# numero# he*adeimal oloamo# ,*
fiando X,*%$b!+ para atribuirmo# um .alor a um re4i#trador u#amo# o opode mo. #e4uido do
.alor 8ue #er; atribu7do e o re4i#trador #eparado por .ir4ula (#: lembrando 8ue i##o 6 a #inta*e
atYt!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo. X$%&+ha*^!Z
return ,Z
b
tamb6m podemo# atribuir um .alor de um re4i#trador para outro
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo. X$%&+hb* Z^
^mo. hb*+ha*^!Z
return ,Z
b
podemo# e#peifiar a 8uantidade de bMte# 8ue #er; opiado om mo.b (HbMte#!+ mo.'(%GbMte#!+
mo.l($/bMte#! e mo.8(GEbMte#!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.b X,$+hah Z^
^mo.b X%&+hal Z^
^mo.' ha*+hb*^!Z
return ,Z
b
podemo# #omar um .alor a um re4i#trador om o opode add nele oloamo# o .alor a #er atribuido
e o re4i#trador+ o e*emplo abai*o eu oloo o .alor /%& no re4i#trador a* depoi# eu adiiono mai#
%,, ao .alor dando o .alor $%&
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X/%&+ha* Z^
^add X%,,+ha*^!Z
return ,Z
b
tamb6m 6 po##7.el #ubtrair om o opode #ub
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X/%&+ha* Z^
^#ub X%,,+ha*^!Z
return ,Z
b
para multiplia52o u#amo# o opode imul
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ha* Z^
^imul X/+ha*^!Z
return ,Z
b
podemo# inrementar mai# um ao nQmero om o opode in #e4uido do re4i#trador
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^in ha* Z^!Z
return ,Z
b
tamb6m podemo# derementar om o opode de
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^de ha* Z^!Z
return ,Z
b
podemo# d; um pulo para determinado label om o opode 3mp depoi# di4itamo# o nome do label
para onde .amo# pular
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^3mp ft# Z^
^ft#: ^!Z
return ,Z
b
#empre tome uidado om loop infinito
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^ft#: Z^
^3mp ft#^!Z
return ,Z
b
podemo# pular para outro label 8ue e#te3a dentro de outra fun52o a#m+ no e*emplo abai*o ele pula
para outro label #em e*eutar o printf
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^3mp ft# Z^!Z
printf(^o arduino e #ho' d>d^!Z
a#m(^ft#:^!Z
return ,Z
b
para omparar doi# re4i#tradore# podemo# u#ar o opode mp
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X%,,+ hb* Z^
^mp ha*+hb* Z^!Z
return ,Z
b
para pular para determinado ponto #e a ompara52o for i4ual podemo# u#ar o opode mp e depoi#
o opode 3e 8ue pula a#o a ompara52o #e3a .erdadeira (i##o #eria e8ui.alente e#trutura ondiional
if!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X$%&+ hb* Z^
^mp ha*+hb* Z^
^3e ft#^!Z
printf(^#e a omparaao for i4ual nao .ai mo#tra e##e te*to U>U ^!Z
a#m(^ft#:^!Z
return ,Z
b
e*i#te o 3ne 8ue pula a#o n2o #e ompara52o n2o for i4ual (i##o #eria e8ui.alente o if om um
operador not!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X%,,+ hb* Z^
^mp ha*+hb* Z^
^3ne ft#^!Z
printf(^#e a omparaao for diferente nao mo#tra e##e te*to U>U ^!Z
a#m(^ft#:^!Z
return ,Z
b
e*i#te o opode 34 pula a#o o numero #e3a maior (#: lembrando 8ue i##o atYt ent2o o e*emplo
abai*o #eria e8ui.alente a i##o b* W a* ou %,, W $%&!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X%,,+ hb* Z^
^mp ha*+hb* Z^
^34 ft#^!Z
printf(^#e o numero for maior nao mo#tra e##e te*to U>U ^!Z
a#m(^ft#:^!Z
return ,Z
b
om o opode 3l #eria o in.er#o do anterior ele pula a#o o numero #e3a menor
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X%,,+ hb* Z^
^mp ha*+hb* Z^
^3l ft#^!Z
printf(^#e o numero for menor nao mo#tra e##e te*to U>U ^!Z
a#m(^ft#:^!Z
return ,Z
b
para maior e i4ual podemo# u#ar opode 3e4
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X%,,+ hb* Z^
^mp ha*+hb* Z^
^34e ft#^!Z
printf(^#e o numero for maior ou i4ual nao mo#tra e##e te*to U>U ^!Z
a#m(^ft#:^!Z
return ,Z
b
para o menor e i4ual #eria o opode 3le
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X$%&+ ha* Z^
^mo.' X%,,+ hb* Z^
^mp ha*+hb* Z^
^3le ft#^!Z
printf(^#e o numero for menor ou i4ual nao mo#tra e##e te*to U>U ^!Z
a#m(^ft#:^!Z
return ,Z
b
3; aprendemo# a fa)er pulo ompara52o e inremento ent2o podemo# fa)er la5o# i4ual o 'hile+ um
e*emplo #eria o re4i#trador a* om o .alor , e fiar em um loop inrementado ate he4a a
determinada ondi52o para #e##ar (ou no a#o pular!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X,+ ha* Z^
^eof: Z^
^mp X%,+ha* Z^
^3le ft# Z^
^in ha* Z^
^3mp eof Z^
^ft#: ^!Z
return ,Z
b
podemo# u#ar o opode loop para pular para determinado ponto+ para u#ar e##e opode temo# 8ue
definir um .alor para o re4i#trador *+ riar um label e por fim u#ar o opode loop #e4uido do label
(e##e opode e bem pareido om o la5o for!
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X%,+ h* Z^
^ft#: Z^
^loop ft#^!Z
return ,Z
b
ate a4ora .imo# omo u#ar o# opode# e re4i#tradore# a4ora .amo# aprender omo 3o4ar o# .alore#
8ue e#tao em re4i#trador na mem:ria ou em .ari;.ei#+ a primeira manipula52o de mem:ria 8ue
.amo# .er #era a #tak+ a #tak 6 uma mem:ria 8ue le.a uma e#trutura ba#ia 8ue #eria a primeira
oi#a a entrar #er; a ultima a #air+ ela funiona empilhando o# dado# um em ima do# outro# por i##o
o nome dela 6 #tak ou pilha+ a #tak tem .;ria# utilidade# uma dela# 6 empilhar dado# na ordem
erta para #er e*eutada por determinada fun52o+ outra 6 para .oL arma)enar o# dado# do#
re4i#tradore# ou ate manipular ele# mai# tarde #em perde ele#+ o# doi# opode mai# u#ado# para
manipular o #tak 6 o pu#h para empilhar al4o no #tak e o pop para retirar tamb6m e*i#te um
re4i#trado e#peifio 8ue aponta para o topo do #tak 8ue 6 o J#pK+ omo dito ante# para empilhar
um .alor u#amo# opode pu#h depoi# o re4i#trador ou .alor
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X%,+ ha* Z^
^pu#h ha*^!Z
return ,Z
b
e para retirar u#amo# o opode pop
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X%,+ ha* Z^
^pu#h ha* Z^
^pop ha*^!Z
return ,Z
b
no e*emplo abai*o eu u#o a pilha para troar de ordem o# re4i#tradore# a* e b*
Oinlude ]#tdio.hW
int main(.oid!
a
a#m(^mo.' X%,+ ha* Z^
^mo.' X$%&+hb* Z^
^pu#h ha* Z^
^pu#h hb* Z^
^pop ha* Z^
^pop hb*^!Z
return ,Z
b
para a 4ente atribuir um .alor de um re4i#trador para uma .ari;.el u#amo# doi# ponto# depoi# da
ultima #trin4+ u#amo# uma outra #trin4 8ue de.e ter o #7mbolo de i4ual e a letra do re4i#trador de
onde #er; atribu7do+ lo4o em #e4uida um abre e feha parLnte#e# e a .ari;.el dentro+ tambem todo#
o# re4i#tradore# de.e ter doi# #7mbolo# de porenta4em
Oinlude ]#tdio.hW
int main(.oid!
a
int ft#Z
a#m(^mo.' X$%&+ hha*^ : ^ga^(ft#!!Z
printf(^re4i#trador a*: hd^+ft#!Z
return ,Z
b
para arma)enar .alor de doi# ou mai# re4i#tradore# #eparamo# por .ir4ula
Oinlude ]#tdio.hW
int main(.oid!
a
int ft#+ eofZ
a#m(^mo.' X$%&+ hha* Z^
^mo.' X%,,+ hhb*^ : ^ga^(ft#!+ ^gb^(eof!!Z
printf(^re4i#trador a*: hd Vn^+ft#!Z
printf(^re4i#trador a*: hd^+eof!Z
return ,Z
b
tamb6m podemo# d; uma 8uebra de linha para fiar or4ani)ado
Oinlude ]#tdio.hW
int main(.oid!
a
int ft#+ eofZ
a#m(^mo.' X$%&+ hha* Z^
^mo.' X%,,+ hhb*^
: ^ga^(ft#!+ ^gb^(eof!!Z
printf(^re4i#trador a*: hd Vn^+ft#!Z
printf(^re4i#trador a*: hd^+eof!Z
return ,Z
b
para entrar om o# .alore# oloamo# doi# ponto# depoi# da8uele outro 8ue #eria a #aida+ uma #trin4
om a letra do re4i#trador+ abre e feha parLnte#e# om a .aria.el 8ue tem o .alor 8ue #era
arma)enado no re4i#trador
Oinlude ]#tdio.hW
int main(.oid!
a
int ft# g $%&Z
a#m(^in hha*^ : : ^a^(ft#!!Z
return ,Z
b
podemo# entrar e #air om .alore#+ no e*emplo abai*o eu entro om a .ari;.el ft# o a#m proe##a e
inrementa mai# um depoi# retorna para a me#ma .ari;.el o no.o .alor
Oinlude ]#tdio.hW
int main(.oid!
a
int ft# g $%&Z
a#m(^in hha*^ : ^ga^(ft#! : ^a^(ft#!!Z
printf(^hd^+ft#!Z
return ,Z
b
11.0 4im do arqui1o /?40
Dom 4alera eu a4rade5o a todo# 8ue he4aram no final de##e ar8ui.o #em pular nenhum arater
eD+ a4rade5o tamb6m o# mano#(a#! 8ue #empre e#t2o a3udando no re#imento do f:rum n2o #: no
f:rum eof omo 8ual8uer outro f:rum e blo4#+ tambem n2o po##o dei*ar de a4radeer o mm*m+
f.ramon e #u#p$it,-.irtual o# atuai# adm# do f:rum eof e outro# membro# ati.o# por #empre po#tar
bon# onteQdo# e #oure# la+ #obre e##e ebook ter he4ado ao final eu futuramente .ou adiionar
no.o# onteQdo# 8ue fio faltando e no.a# "?I# omo (@R e C<NL entre outra#+ 8ual8uer
modifia52o 8ue eu fi)er po#tarei la no f:rum ou no faebook informando+ 8ual8uer #u4e#t2o ou
ritia #er; bem>.inda+ du.ida# e#tarei #empre di#po#to a a3udar+ para a8uele# 8ue n2o 6 membro do
f:rum reomendo muito #e ada#trar tem muito onteudo de primeira #obre di.er#o# a##unto# #endo
ele# pro4rama52o+ pente#t+ #i#tema operaionai#+ 4ame#+ anime#+ filme# entre outro#+ ent2o 6 i##o
4alera ate a pr:*ima mm
return ,Z

Você também pode gostar