Académique Documents
Professionnel Documents
Culture Documents
C(linguagemdeprogramao)
Origem:Wikipdia,aenciclopdialivre.
C(/si/,comonaletrac)umdeusogeral,imperativo
computadorlinguagemdeprogramao,apoiando C
programaoestruturada,escopodevariveislexicale
recurso,enquantoumsistemadetipoestticoimpedeque
muitasoperaesnointencionais.Pordesign,Cfornece
construesquemapeiamdeformaeficienteparatpicas
instruesdemquinae,portanto,temencontradoutilizao
duradouraemaplicaesqueanteriormentetinhasido
codificadasemlinguagemassembly,incluindosistemas
operacionais,bemcomovriosaplicativosdesoftwarepara
computadoresquevodesdesupercomputadorespara ALinguagemdeProgramaoC [1](muitasvezes
sistemasembarcados. referidacomo"K&R"),olivroseminalsobreC
CfoioriginalmentedesenvolvidoporDennisRitchieentre Paradigma Imperativo(processual),
1969e1973,noBellLabs,[5]eusadoparare estruturado
implementaodoUnixsistemaoperacional.[6]Desdeento Projetadopor DennisRitchie
setornouumadaslinguagensdeprogramaomaisusadas Desenvolvedor DennisRitchieedeBellLabs
detodosostempos,[7][8]comCcompiladoresdevrios (criadores)ANSIX3J11(ANSIC
fornecedoresdisponveisparaamaioriadosexistentes )ISO/IECJTC1/SC22/WG14
arquiteturasdecomputadoresesistemasoperacionais.Cfoi
(ISOC)
padronizadapeloAmericanNationalStandardsInstitute
(ANSI)desde1989(verANSIC)e,posteriormente,pela Primeiro 1972 [2]
OrganizaoInternacionaldeNormalizao(ISO). apareceu
Versoestvel C11/dezembro2011
Adisciplina Esttica,fraco,manifesto,
Contedo dedigitao nominal
1 projeto OS Plataformacruzada
2 Visogeral Extensesde .c,.h
2.1 Relaescomoutraslnguas nomede
3 Histria
arquivo
3.1 desenvolvimentosadiantados
3.2 K&RC grandesimplementaes
3.3 ANSICeISOC K&R,GCC,Clang,IntelC,MicrosoftVisualC
3.4 C99
3,5 C11 ++,PellesC,WatcomC
3.6 EmbutidoC Dialetos
4 Sintaxe
Cyclone,UnifiedParallelC,SplitC,cilk,C*
4.1 Conjuntodecaracteres
4.2 Aspalavrasreservadas Influenciadopor
4.3 Operadores
5 "Ol,mundo"exemplo B(BCPL,CPL),ALGOL68, [3]Assembleia,
6 tiposdedados PL/I,Fortran
6.1 Ponteiros Influenciado
6.2 Arrays
6.3 permutabilidadematrizponteiro Numerosas:AMPL,AWK,csh,C++,C,C#
7 Gerenciamentodememria ,ObjectiveC,BITC,D,Go,Java,JavaScript,
8 Bibliotecas Julia,Limbo,LPC,Perl,PHP,Pike,
9 Ferramentasdeidioma Processing,Python,Rust,Seed7,vala,Verilog
10 Usos
(HDL) [4]
11 idiomasrelacionados
12 Vertambm
https://en.wikipedia.org/wiki/C_(programming_language) 1/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
12 Vertambm ProgramaoCemWikibooks
13 Notas
14 Referncias
15 Fontes
16 Leituraadicional
17 Ligaesexternas
Projeto
Cumimperativoprocessualidioma.Elefoiprojetadoparasercompiladousandoumrelativamentesimples
compilador,paraforneceracessodebaixonvelparaamemria,paraproporcionarconstruesdelinguagem
quemapeiamdeformaeficienteparainstruesdemquina,eparaexigiromnimodesuportedetempode
execuo.Portanto,Ceratilparamuitasaplicaesqueanteriormentetinhasidocodificadasemlinguagem
assembly,porexemplo,naprogramaodosistema.
Apesardassuascapacidadesdebaixonvel,alinguagemfoiprojetadaparaincentivarmultiplataformade
programao.UmcompatvelcomospadreseportablyprogramaCescritopodesercompiladoparauma
amplavariedadedeplataformasdecomputadoresesistemasoperacionaiscompoucasmudanasemseu
cdigofonte.Alinguagemtornousedisponvelemumavastagamadeplataformas,desdeincorporadas
microcontroladoresparasupercomputadores.
Visogeral
ComoamaioriadaslinguagensimperativasnoALGOLtradio,Ctemfacilidadesparaprogramao
estruturadaepermitequeoescopodevariveislexicalerecurso,enquantoumaestticatipodesistema
impedequemuitasoperaesnointencionais.EmC,todoocdigoexecutvelestcontidodentrodesub
rotinas,quesochamadas"funes"(emboranonosentidoestritodaprogramaofuncional).Parmetrosde
funososemprepassadosporvalor.PassagemporrefernciasimuladaemC,passandoexplicitamente
ponteirovalores.TextoCfontedoprogramalivredeformato,usandoopontoevrgulacomoumadeclarao
terminatorechavesparaagruparblocosdedeclaraes.
AlinguagemCtambmapresentaasseguintescaractersticas:
Humpequenonmero,fixadepalavraschave,incluindoumconjuntocompletodefluxodecontrole
primitivos:for,if/else,while,switch,edo/while.Nomesdefinidospelousurionosodistinguidos
depalavraschaveporqualquertipodesigilo.
Humgrandenmerodeoperadoresaritmticoselgicos,taiscomo+,+=,++,&,~,etc.
Maisdoqueumatarefapodeserrealizadaemumanicainstruo.
Osvaloresderetornodafunopodemserignoradosquandonosonecessrios.
Adigitaoesttica,masfracamenteaplicadas:todososdadostemumtipo,masconverses
implcitaspodeserrealizada.
Declaraosintaxecontextodeusoimita.Cnotempalavrachave"definir"Emvezdisso,uma
declaraocomeandocomonomedeumtipotomadacomoumadeclarao.Noexistepalavrachave
"funo"Emvezdisso,umafunoindicadapelosparntesesdeumalistadeargumentos.
Definidospelousurio(typedeftipos)ecompostossopossveis.
Heterogneostiposdedadosagregados(struct)permitemqueoselementosdedados
relacionadosaseracessadoeatribudocomoumaunidade.
Matrizindexaoumanotaosecundrio,definidoemtermosdearitmticadeponteiro.Ao
contrriodasestruturas,asmatrizesnosoobjetosdeprimeiraclasseElesnopodemser
atribudosoucomparadosusandooperadoresincorporadosnicos.Noexistepalavrachave
"matriz",emusooudefinioEmvezdisso,osparntesisrectosindicammatrizes
sintacticamente,porexemplomonth[11].
Tiposenumeradossopossveiscomaenumpalavrachave.Elesnosomarcados,esolivremente
interconvertiblescomnmerosinteiros.
https://en.wikipedia.org/wiki/C_(programming_language) 2/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Cordasnosoumtipodedadosseparada,massoconvencionalmenteimplementadoscomo
terminaonulaarraysdecaracteres.
Acessodebaixonvelamemriadocomputadorpossvelatravsdaconversodeendereosde
mquinaparadigitadasponteiros.
Procedimentos(subrotinasnoretornamvalores)soumcasoespecialdafuno,comumtipode
retornonotipadovoid.
Asfunesnopodemserdefinidasnombitolexicaldeoutrasfunes.
Funoedadosponteirospermitiradhocpolimorfismoemtempodeexecuo.
Umprprocessadorexecutamacrodefinio,cdigofonteinclusodearquivoecompilao
condicional.
Humaformabsicademodularidade:arquivospodemsercompiladosseparadamenteeligadasem
conjunto,comcontrolesobrequaisfunesedadosobjetossovisveisparaoutrosarquivosviastatice
externatributos.
Funcionalidadecomplexa,comoI/O,cadeiademanipulaoefunesmatemticasso
consistentementedelegadaarotinasdebiblioteca.
EnquantoCnoincluialgumascaractersticasencontradasemoutraslinguagens,taiscomoorientaoa
objetosoucoletadelixo,taiscaractersticaspodemserimplementadasouemuladoemC,muitasvezespor
meiodebibliotecasexternas(porexemplo,ocoletordelixoBoehmouosistemadeobjetoGLib).
Relaescomoutrosidiomas
MuitaslnguasposterioresteremprestadodirectaouindirectamentedeC,incluindoC++,D,Go,Rust,Java
,JavaScript,Limbo,LPC,C#,ObjectiveC,Perl,PHP,Python,Swift,Verilog(descriodehardware
idioma),[4]edoUnixshellC.Estaslnguastmatradomuitasdassuasestruturasdecontroleeoutros
recursosbsicosdeC.Amaioriadeles(comPythonaexceomaisdramtica)tambmsomuito
sintaticamentesemelhanteaC,emgeral,eelestendemacombinaraexpressoeafirmaoreconhecvel
sintaxeCcomsistemassubjacentestipo,modelosdedadosesemnticaquepodeserradicalmentediferente.
Histria
Desenvolvimentosincio
AorigemdoCestintimamenteligadaaodesenvolvimentodoUnix
sistemaoperacional,originalmenteimplementadoemlinguagem
assemblyemumPDP7porRitchieeThompson,incorporandovrias
idiasdoscolegas.Eventualmente,elesdecidiramportarosistema
operacionalparaumPDP11.AversoPDP11originaldoUnixfoi
desenvolvidaemlinguagemassembly.Osdesenvolvedoresestavam
considerandoreescreverosistemautilizandoalinguagemB,verso
simplificadadeThompsondeBCPL.[9]Noentantoaincapacidadede
BparatirarpartidodealgumasdascaractersticasdoPDP11, KenThompson(esquerda)com
nomeadamentebytedeendereamento,levouaC.OnomeCfoi DennisRitchie(direita,oinventor
escolhidosimplesmentecomooseguinte,depoisB.[10] dalinguagemdeprogramaoC)
OdesenvolvimentodeCcomeouem1972nosistemaPDP11Unix
[11]eapareceupelaprimeiraveznaverso2Unix.[12]Alnguanofoiinicialmenteprojetadocom
portabilidadeemmente,maslogocorreuemdiferentesplataformas,bemcomo:umcompiladorparaa
Honeywell6000foiescritonoprimeiroanodahistriadaC,enquantoumIBMSystem/370portoseguidoem
breve.[1][11]
Tambmem1972,umagrandepartedoUnixfoireescritoemC.[13]Em1973,comaadiodestructtipos,a
linguagemCtornousepoderosoosuficienteparaqueamaiorpartedoUnix'sdokernelestavaagoraemC.
https://en.wikipedia.org/wiki/C_(programming_language) 3/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Unixfoiumdosprimeiroskernelsdosistemaoperacionalimplementadasemumidiomadiferentedoconjunto.
CasosanterioresincluemoMulticssistemaquefoiescritoemPL/I)eControleMestrePrograma(MCP)para
aBurroughsB5000escritoemALGOLem1961.Emvoltade1977,RitchieeStephenC.Johnsonfezmais
alteraesparaoidiomaparafacilitarPortabilidadedosistemaoperacionalUnix.JohnsonporttilCCompiler
serviudebaseparavriasimplementaesdeCemnovasplataformas.[11]
K&RC
Em1978,BrianKernighaneDennisRitchiepublicouaprimeiraediodeThe
CProgrammingLanguage.[1]Estelivro,conhecidoporprogramadoresC
como"K&R",serviupormuitosanoscomouminformalespecificaoda
lngua.AversodeCquesedescrevecomumentereferidocomoCK&R.A
segundaediodolivro[14]abrangeatardeANSICpadro,descritoabaixo.
AK&Rintroduziuvriosrecursosdelinguagem:
BibliotecadeE/Spadro
longinttipodedados
unsignedinttipodedados
Operadoresdeatribuiocompostosdeforma(talcomo)foramalterados
paraaforma(isto,)pararemoveraambiguidadesemnticacriadopor
construes,taiscomo,oqualtinhasidointerpretadascomo(decrscimo
de10)emvezdoquesedestinemeventualmente(deixarser10).=op= Acapadolivro,alinguagem
op==i=10i=10ii=10i deprogramaoC,primeira
edioporBrianKernighane
MesmoapsapublicaodanormaANSI1989,pormuitosanosK&RC DennisRitchie
aindafoiconsideradoo"menordenominadorcomum",aoqueprogramadores
Cserestritoaomximodeportabilidadefoidesejado,umavezquemuitos
compiladoresmaisantigosaindaestavamemuso,eporquecuidadosamenteescritoK&RCcdigopodeser
legalStandardCtambm.
NasprimeirasversesdoC,apenasasfunesqueretornamoutrosdoqueostiposintdevemserdeclaradosse
usadoantesdadefiniodafunofunesutilizadassemdeclaraoprviaforamPresumesequetipode
retornoint.
Porexemplo:
longasome_function();
/**Int/other_function();
/*Int*/calling_function()
{
longatest1;
registrar/*int*/test2;
test1=some_function();
se(test1>0)
test2=0;
outra
test2=other_function();
voltartest2;
}
OsinttiposespecficosquesocomentadaspoderiaseromitidanoK&RC,massonecessriasnormas
posteriores.
DesdeK&Rdeclaraesdefunonoincluemqualquerinformaosobreosargumentosdafuno,
parmetrosdefunotipochequesnoforamrealizados,emboraalgunscompiladoresiriaemitiruma
mensagemdeavisoseumafunolocalfoichamadacomonmeroerradodeargumentos,ousevrias
https://en.wikipedia.org/wiki/C_(programming_language) 4/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
chamadasparaumafunoexternaUsadonmerosdiferentesoutiposdeargumentos.Ferramentasseparadas,
comodoUnixlintutilitrioforamdesenvolvidosque(entreoutrascoisas)poderiaverificaraconsistnciado
usodefunoemvriosarquivosdeorigem.
NosanosseguintespublicaodaK&RC,vriosrecursosforamadicionadoslinguagem,apoiadopor
compiladoresdaAT&T(emparticularPCC[15])ealgunsoutrosfornecedores.Estesincluem:
voidFunes(isto,funessemvalorderetorno)
funesqueretornamstructouuniontipos(aoinvsdeponteiros)
atribuiodestructtiposdedados
Enumerados
Ograndenmerodeextensesefaltadeacordosobreumabibliotecapadro,juntamentecomapopularidade
linguagemeofatodequenemmesmooUnixcompiladoresprecisamenteimplementadaaespecificaoK&
R,levounecessidadedepadronizao.
ANSICeISOC
Duranteofinaldosanos1970e1980,versesdoCforamimplementadas
paraumaamplavariedadedecomputadoresmainframe,minicomputadorese
microcomputadores,incluindooIBMPC,comosuapopularidadecomeou
aaumentarsignificativamente.
Em1983,oAmericanNationalStandardsInstitute(ANSI)formouuma
comisso,X3J11,paraestabelecerumaespecificaopadrodeC.X3J11
baseopadroCsobreaimplementaoUnixnoentanto,aporono
portteisdabibliotecaUnixCfoitransferidaparaoIEEEgrupodetrabalho
1003parasetornarabasepara1988POSIXpadro.Em1989,opadroCfoi
ratificadocomoANSIX3.1591989"LinguagemdeProgramaoC".Esta
versodalinguagemmuitasvezesreferidacomoANSIC,StandardC,ou
svezesC89.
Em1990,opadroANSIC(comasalteraesdeformatao)foiadoptado Acapadolivro,alinguagem
pelaOrganizaoInternacionaldeNormalizao(ISO)comoISO/IEC deprogramaoC,segunda
9899:1990,quesvezeschamadoC90.Portanto,ostermos"C89"e"C90" edioporBrianKernighane
referemsemesmalinguagemdeprogramao. DennisRitchiecobrindoANSI
C
ANSI,comooutrosorganismosnacionaisdenormalizao,nomaisse
desenvolveopadroCdeformaindependente,masadiaanorma
internacionalC,mantidopelogrupodetrabalhoISO/IECJTC1/SC22/WG14.Aadoonacionaldeuma
atualizaoaopadrointernacionalocorretipicamentedentrodeumanodapublicaodaISO.
UmdosobjectivosdoprocessodenormalizaoCeraproduzirumsuperconjuntodoK&RC,incorporando
muitasdascaractersticasnooficiaisposteriormenteintroduzidas.Ocomitdepadrestambmincluiuvrios
recursosadicionais,taiscomoprottiposdefuno(emprestadodeC++),voidponteiros,suportepara
internacionaisconjuntosdecaractereselocaisemelhoriasdeprprocessamento.Emboraasintaxeparaas
declaraesdeparmetrosfoiaumentadoparaincluiroestilousadonoC++,aK&interfacedeRcontinuaram
aserpermitido,paracompatibilidadecomcdigofonteexistente.
C89suportadopeloscompiladoresCatuais,eamaioriadocdigoCqueestsendoescritohojebaseado
nele.QualquerprogramaescritoapenasemPadroCesemquaisquerhiptesesdependentedehardwareser
executadocorretamenteemqualquerplataformacomumaexecuoconformeC,dentrodeseuslimitesde
recursos.Semestasprecaues,osprogramaspodemcompilarapenasnumadeterminadaplataformaoucom
umcompiladorparticular,devido,porexemplo,comautilizaodebibliotecasdenoconvencionais,tais
comoGUIbibliotecas,ouumadependnciadeatributosespecficosplataformacompileroutaiscomoo
tamanhoexatodetiposdedadosebyteordenao.
https://en.wikipedia.org/wiki/C_(programming_language) 5/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
NoscasosemqueocdigodevesercompilabletantoporcompiladoresoubaseadoemCK&Rconforme
padro,a__STDC__macropodeserusadaparadividirocdigoemseesStandardeK&Rparaevitarousode
umcompiladorbaseadoemCK&RderecursosdisponveissomentenaNormaC
ApsoprocessodepadronizaoANSI/ISO,aespecificaodalinguagemCpermaneceurelativamente
estticaporvriosanos.Em1995,foipublicadaaEmendaNormativa1normaCde1990(ISO/IEC9899/
AMD1:1995,conhecidainformalmentecomoC95)paracorrigiralgunsdetalheseacrescentarumsuportemais
extensoparaconjuntosdecaracteresinternacionais.
C99
OpadroCfoiposteriormenterevistonofinalde1990,levandopublicaodaISO/IEC9899:1999em
1999,quecomumentereferidocomo"C99".Desdeento,foialteradatrsvezesporCorrigendaTcnica.[16]
C99introduziuvriosnovosrecursos,incluindofunesembutidas,vriosnovostiposdedados(incluindo
longlonginteumcomplextipopararepresentarnmeroscomplexos),matrizesdecomprimentovarivele
membrosdamatrizflexvel,suportemelhoradoparaIEEE754ponto,suporteflutuanteparamacrosvaridicos
(macrosdevarivelarity),esuporteparacomentriosdeumalinhacomeandocom//,comoemBCPLouC
++.MuitosdelesjforamimplementadoscomoextensesemvrioscompiladoresC.
C99paraamaiorpartecompatvelcomC90,masmaisrgidoemalgunsaspectosemparticular,uma
declaraoquenotenhaumespecificadordetiponotemintassumidoimplicitamente.Amacropadro
__STDC_VERSION__definidocomovalor199901LparaindicarqueoapoioC99estdisponvel.GCC,Solaris
StudioeoutroscompiladoresCagorasuportammuitosoutodososnovosrecursosdoC99.OcompiladorCno
MicrosoftVisualC++,noentanto,implementaopadroC89easpartesdoC99quesonecessriospara
compatibilidadecomC++11.[17]
C11
Em2007,iniciouseumanovarevisodopadroC,informalmentedenominada"C1X",atasuapublicao
oficialem20111208.OComitdePadresCadotoudiretrizesparalimitaraadoodenovosrecursosque
noforamtestadospelasimplementaesexistentes.
OpadroC11adicionavriosnovosrecursosaoCebiblioteca,incluindomacrosgenricosdetipo,estruturas
annimas,suporteUnicodeaprimorado,operaesatmicas,multithreadingefunesdeverificaode
limites.TambmtornaalgumaspartesdabibliotecaC99existenteopcionaisemelhoraacompatibilidadecom
C++.Amacropadro__STDC_VERSION__definidocomo201112LparaindicarqueoapoioC11estdisponvel.
EmbutidoC
Historicamente,aprogramaoCembutidarequerextensesnopadronizadasparaalinguagemC,afimde
suportarrecursosexticoscomoaritmticadepontofixo,vriosbancosdememriadistintoseoperaes
bsicasdeE/S.
Em2008,oComitdePadresCpublicouumrelatriotcnicoestenderalinguagemC[18]pararesolveresses
problemas,fornecendoumpadrocomumparatodasasimplementaesdeaderir.Eleincluiumasriede
recursosnodisponveisemCnormais,taiscomoaritmticadepontofixo,espaosdeendereocomnome,e
eubsica/Ohardwaredeendereamento.
Sintaxe
https://en.wikipedia.org/wiki/C_(programming_language) 6/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
CtemumagramticaformalespecificadopelanormaC.[19]Osfinsdelinhasogeralmentenosignificativa
noCContudo,oslimitesdelinhatmsignificadoduranteafasedeprprocessamento.Comentriospodem
aparecerentreosdelimitadores/*e*/,ou(desdeC99)seguinte//atofimdalinha.Comentriosdelimitada
por/*e*/noseaninham,eessassequnciasdecaracteresnosointerpretadoscomodelimitadoresde
comentriosseelesaparecemdentrodecordasoudecaracteresliterais.[20]
OsarquivosdeorigemCcontmdeclaraesedefiniesdefuno.Asdefiniesdefuno,porsuavez,
contmdeclaraeseafirmaes.Declaraesquerdefinirnovostiposusandopalavraschavecomostruct,
unioneenum,ouatribuirtiposdeetalvezdearmazenamentodereservaparanovasvariveis,geralmentepor
escritodotiposeguidodonomedavarivel.Palavraschave,taiscomochareintespecificarostiposde
embutidos.Seesdecdigosocolocadosentrechaves({e},svezeschamadode"chaves")paralimitaro
mbitodasdeclaraeseagircomoumanicainstruoparaestruturasdecontrole.
Comoumalinguagemimperativa,Cusadeclaraesdeespecificaraes.Aindicaomaiscomumuma
indicaodaexpresso,queconsistedeumaexpressoaseravaliada,seguidoporumpontoevrgulacomo
umefeitocolateraldaavaliao,asfunespodemserchamadosevariveispodemseratribudosnovos
valores.Paramodificaraexecuosequencialnormaldeinstrues,Cfornecevriasinstruesdecontrole
fluxoidentificadasporpalavraschavereservadas.Programaoestruturadaapoiadoporif(else)aexecuo
condicionalepordowhile,whileeforexecuoiterativo(looping).Afordeclaraoteminicializao
separada,ensaios,easexpressesdereinicializao,qualquerumoutodosdosquaispodemseromitidos.
breakecontinuepodeserusadoparadeixarainstruodeloopmaisinternooupularparaasuareinicializao.
Htambmumnoestruturadagotodeclaraoqueseramificadiretamenteparaadesignadaetiquetadentroda
funo.switchseleccionaumcaseparaserexecutadocombasenovalordeumaexpressointeira.
Asexpressespodemusarumavariedadedeoperadoresinternosepodemconterchamadasdefuno.Aordem
naqualosargumentosparafuneseoperandosparaamaioriadosoperadoressoavaliadosno
especificada.Asavaliaespodemmesmoserintercaladas.Noentanto,todososefeitossecundrios(incluindo
oarmazenamentodevariveis)ocorrerantesdoprximo"pontodesequncia"Ospontosdeseqncia
incluemofinaldecadadeclaraodeexpressoeaentradaeretornodecadachamadadefuno.Pontosde
seqnciatambmocorrerduranteaavaliaodeexpressesquecontmdeterminadosoperadores(&&,||,?:e
ooperadorvrgula).Issopermiteumaltograudeotimizaodecdigoobjetopelocompilador,masrequer
programadoresCparatermaiscuidadoparaobterresultadosconfiveisdoquenecessrioparaoutras
linguagensdeprogramao.
KernighaneRitchiediznaintroduodeALinguagemdeProgramaoC:"C,comoqualqueroutralngua,
temsuasmanchasAlgunsdosoperadorestemaprecednciaerrado,algumaspartesdasintaxepoderiaser
melhor.".[21]OpadroCnotentoucorrigirmuitasdestasmanchas,devidoaoimpactodetaisalteraesnas
softwarejexistente.
Conjuntodecaracteres
OconjuntodecaracteresdeorigemCbsicoincluiosseguintescaracteres:
LetrasmaisculaseminsculasdeISOBsicoalfabetolatino:azAZ
Dgitosdecimais:09
Personagensgrficos:!"#%&'()*+,./:;<=>?[\]^_{|}~
Caracteresembranco:espao,tabulaohorizontal,verticalguia,alimentaodeformulrio,de
novalinha
NewlineindicaofinaldeumalinhadetextoElenoprecisacorresponderaumnicocarterreal,emborapor
conveninciaCtratalocomoum.
https://en.wikipedia.org/wiki/C_(programming_language) 7/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Caracterescodificadosadicionaismultibytepodeserusadoemstringsliterais,maselesnosototalmente
porttil.OmaisrecentepadroC(C11)permitemultinacionaisUnicodecaracteresparaserincorporado
portablynotextofonteCusando\uXXXXou\UXXXXXXXXcodificao(ondeoXdenotaumcaracterehexadecimal),
emboraesserecursoaindanofoiamplamenteimplementado.
OconjuntobsicoCcarterdeexecuocontmosmesmoscaracteres,juntamentecomrepresentaesde
alerta,deretrocesso,eretornodecarro.Runtimesuporteparaconjuntosdecaracteresestendidostem
aumentadoacadarevisodopadroC.
Aspalavrasreservadas
C89tem32palavrasreservadas,tambmconhecidascomopalavraschave,quesoaspalavrasquenopodem
serusadasparaoutrospropsitosquenoaquelesparaosquaiselesestoprdefinidos:
C99reservoumaiscincopalavras:
C11reservadosmaissetepalavras:[22]
Amaioriadaspalavrasrecentementereservadascomeamcomumsublinhadoseguidoporumaletra
maiscula,porqueidentificadoresdesseformulrioforampreviamentereservadospelopadroCparauso
somenteporimplementaes.Comoocdigofontedoprogramaexistentenodeveriaterusadoesses
identificadores,elenoseriaafetadoquandoasimplementaesCcomeassemasuportaressasextensespara
alinguagemdeprogramao.Algunscabealhospadrodefinemsinnimosmaisconvenientespara
identificadoressublinhados.Alinguagemanteriormenteincludoumapalavrareservadachamadaentry,mas
issoraramentefoiimplementado,eagorafoiremovidocomoumapalavrareservada.[23]
Operadores
Csuportaumricoconjuntodeoperadores,quesosmbolosusadosdentrodeumaexpressoparaespecificar
asmanipulaesaserexecutadaaoavaliaressaexpresso.Ctemoperadorespara:
aritmtica:+,,*,/,%
atribuio:=
atribuioampliada:+=,=,*=,/=,%=,&=,|=,^=,<<=,>>=
lgicabitabit:~,&,|,^
bitabitdesloca:<<,>>
https://en.wikipedia.org/wiki/C_(programming_language) 8/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
lgicabooleana:!,&&,||
avaliaocondicional:?:
testedeigualdade:==,!=
chamarfunes:()
incrementoedecremento:++,
seleodemembro:.,>
Tamanhodoobjeto:sizeof
relaesdeordem:<,<=,>,>=
derefernciaeremoodereferncia:&,*,[]
Sequenciamento:,
agrupamentosubexpresso:()
conversodetipo:(typename)
Cusaooperador=(usadaemmatemticaparaexpressaraigualdade)paraindicaraatribuio,seguindoo
precedentedoFortranePL/I,masaocontrriodeALGOLeseusderivados.Cusaooperador==paratestara
igualdade.Asemelhanaentreestesdoisoperadores(atribuioeigualdade)poderesultarnousoacidentalde
umnolugardooutro,eemmuitoscasos,oerronoproduzumamensagemdeerro(emboraalguns
compiladoresproduzamavisos).Porexemplo,aexpressocondicionalif(a==b+1)podesererroneamente
escritoscomoif(a=b+1),oqueseravaliadocomoverdadeiroseafordiferentedezeroapsaatribuio.[24]
OCprecednciadooperadornemsempreintuitiva.Porexemplo,ooperador==ligamaisfortementedoque
(executadoantes)osoperadores&(bitabitE)e|(bitabitOR)emexpresses,taiscomox&1==0,oque
deveserescritocomo(x&1)==0seessaaintenodoprogramador.[25]
"Ol,mundo"exemplo
O"Ol,mundo"exemplo,queapareceunaprimeiraediodoK&R,tornouseomodeloparaumprograma
deintroduonamaioriadoslivrosdeprogramao,independentementedalinguagemdeprogramao.O
programaimprime"Ol,mundo"paraasadapadro,quenormalmenteumateladoterminalounatela.
Aversooriginalfoi:[26]
principal()
{
printf("Ol,mundo\n");
}
Umpadroconforme"Ol,mundo"programa:[a]
#include<stdio.h>
intprincipal(vazio)
{
printf("Ol,mundo\n");
}
Aprimeiralinhadoprogramacontmumadirectivadeprprocessamento,indicadopor#include.Issofaz
comqueocompiladorparasubstituiressalinhacomtodootextodostdio.hcabealhopadro,quecontm
declaraesparapadrofunesdeentradaesada,taiscomoprintf.Oscolchetesemtornostdio.hindicam
questdio.hestlocalizadousandoumaestratgiadepesquisaquepreferecabealhosfornecidoscomo
compiladorparaoutroscabealhoscomomesmonome,aoinvsdeaspasduplasquetipicamenteincluem
arquivosdecabealholocaisouespecficasdoprojeto.
https://en.wikipedia.org/wiki/C_(programming_language) 9/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Aprximalinhaindicaqueumafunochamadamainestsendodefinido.Amainfunoserveaumpropsito
especialemprogramasemCoambientedetempodeexecuochamaamainfunoparacomearaexecuo
doprograma.Otipoespecificadorintindicaqueovalorqueretornadaparaochamador(nestecaso,o
ambientedetempodeexecuo)comoumresultadodaavaliaodamainfuno,umnmerointeiro.A
palavrachavevoidcomoumalistadeparmetrosindicaqueestafunonotemargumentos.[B]
Achavedeaberturaindicaoinciodadefiniodamainfuno.
Aprximalinhachama(desviaaexecuopara)umafunochamadaprintf,quenestecasofornecidoa
partirdeumsistemadebiblioteca.Nestachamada,aprintffunopassada(fornecido)comumnico
argumento,oendereodoprimeirocaracterenastringliteral"hello,world\n".Astringliteralumsemnome
matrizcomelementosdotipochar,criadoautomaticamentepelocompiladorcomumcaracterefinal0
valorizadoparamarcarofimdoarray(printfprecisasaberdisso).A\numasequnciadeescapequeCse
traduzemumanovalinhadecaracteres,quenasadasignificaofimdalinhaatual.Ovalorderetornoda
printffunodotipoint,masdescartadosilenciosamente,umavezquenousado.(Umprogramamais
cuidadosopodetestarovalorderetornoparadeterminarseounoaprintffunocomxito.)Opontoe
vrgula;terminaocomunicado.
Achavedefechamentoindicaofimdocdigoparaamainfuno.DeacordocomaespecificaodoC99e
maisrecente,amainfuno,aocontrriodequalqueroutrafuno,voltarimplicitamenteumvalorde0ao
atingira}queterminaafuno.Issointerpretadopelosistemadetempodeexecuocomoumcdigode
sadaindicandoexecuobemsucedida.[27]
Ostiposdedados
OtipodesistemaemCestticaefracamentetipado,oqueotornasemelhanteaosistematipodeALGOL
descendentes,comoPascal.[28]Hbuiltintiposdeinteirosdevriostamanhos,ambosassinadose,sem
assinaturanmerosdepontoflutuanteetiposenumerados(enum).Tipointeirocharmuitasvezesusadopara
caracteresdebytenico.C99acrescentouumtipodedadosbooleano.Htambmostiposderivados,
incluindomatrizes,ponteiros,registros(struct),enomarcadossindicatos(union).
Cfreqentementeusadoemprogramaodesistemasdebaixonvelondeescapesdosistemadetipopodem
sernecessrios.Ocompiladortentaassegurartipodecorreodamaioriadasexpresses,masoprogramador
podesubstituirasverificaesdevriasmaneiras,usandoumtipocastparaconverterexplicitamenteumvalor
deumtipoparaoutro,ouusandoponteirosousindicatosparareinterpretarosbitssubjacentesDeumobjetode
dadosdealgumaoutramaneira.
AlgunsachamsintaxededeclaraodeCintuitiva,particularmenteparaponteirosdefuno.(Aidiade
Ritchiefoideclararidentificadoresemcontextosqueassemelhaseasuautilizao:"declaraorefleteouso
.")[29]
DoCconversesaritmticasusuaispermitircdigoeficienteasergerado,massvezespodeproduzir
resultadosinesperados.Porexemplo,umacomparaodeinteirosassinadosenoassinadosdelarguraigual
requerumaconversodovalorassinadoparaunsigned.Issopodegerarresultadosinesperadosseovalor
assinadofornegativo.
Ponteiros
Csuportaousodeponteiros,umtipoderefernciaqueregistraoendereooulocalizaodeumobjetoou
funonamemria.Osponteirospodemserdereferencedparaacessardadosarmazenadosnoendereo
apontado,ouparainvocarumapontadoparafuncionar.Ponteirospodemsermanipuladosusandocessoou
aritmticadeponteiro.Arepresentaoemtempodeexecuodeumvalordeponteironormalmenteum
endereodememriabruta(talvezaumentadoporumcampodedeslocamentodentrodeumapalavra),mas
https://en.wikipedia.org/wiki/C_(programming_language) 10/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
comootipodeumponteiroincluiotipodacoisaapontada,asexpressesincluindoponteirospodemser
verificadasportipoEmtempodecompilao.Aaritmticadoponteiroautomaticamentedimensionadapelo
tamanhodotipodedadosapontadopara.OsponteirossousadosparamuitasfinalidadesemC.Ascadeiasde
textosocomumentemanipuladosusandoponteirosparaarraysdecaracteres.Alocaodememriadinmica
realizadautilizandoponteiros.Muitostiposdedados,taiscomorvores,socomumenteimplementado
comoalocadosdinamicamentestructobjetosvinculadosemconjunto,utilizandoponteiros.Ponteirospara
funessoteisparapassarfunescomoargumentosparafunesdeordemsuperior(taiscomoqsortou
bsearch)oucomochamadasderetornoaserinvocadaspelosmanipuladoresdeeventos.[27]
Umponteironulovalorapontaexplicitamenteanenhumlocalvlido.Dereferencingumvalordeponteironulo
indefinido,muitasvezesresultandoemumafalhadesegmentao.Valoresponteironulosoteispara
indicarcasosespeciais,comono"prximo"ponteirononfinaldeumalistaligada,oucomoumaindicao
deerrodefunesretornarponteiros.Emcontextosapropriadosnocdigofonte,comoparaatribuirauma
varivelponteiro,umaconstanteponteironulopodeserescritocomo0,comousemconversoexplcitapara
umtipodeponteiro,oucomoaNULLmacrodefinidaporvrioscabealhospadro.Emcontextoscondicionais,
osvaloresdeponteironulosoavaliadoscomofalsos,enquantotodososoutrosvaloresdeponteiroso
avaliadoscomoverdadeiros.
Ponteirosvoid(void*)apontamparaobjetosdotiponoespecificado,epode,portanto,serusadocomo
ponteirosdedados"genricos".Comootamanhoeotipodoobjetoapontadonosoconhecidos,osponteiros
vaziosnopodemserdesreferenciados,nemaaritmticadeponteirosnelespermitida,emborapossamser
facilmenteconvertidas(eemmuitoscontextos)paraedequalqueroutroponteirodeobjetodigitar.[27]
Ousodescuidadodeponteirospotencialmenteperigoso.Comoelesnormalmentesodesmarcados,uma
variveldeponteiropodeserfeitaparaapontarparaqualquerlocalarbitrrio,oquepodecausarefeitos
indesejveis.Emboraponteirosadequadamenteutilizadosapontamparalugaresseguros,elespodemserfeitos
paraapontarparalocaisinsegurosusandoinvlidoponteiroaritmticaosobjetosqueapontamparapodem
continuaraserutilizadosapsadesalocao(ponteirospendurados)quepodeserusadosemtersido
inicializado(ponteirossilvestres)Ouelespodemserdiretamenteatribudoumvalorinsegurousandoum
elenco,unioouatravsdeoutroponteirocorrompido.Emgeral,Cpermissivoparapermitiramanipulaoe
conversoentretiposdeponteiro,emboraoscompiladorestipicamentefornecemopesparavriosnveisde
verificao.Algumasoutraslinguagensdeprogramaoresolverestesproblemasatravsdautilizaomais
restritivasderefernciatipos.
Arrays
MatriztiposemCso,tradicionalmente,deumtamanhofixo,estticoespecificadoemtempodecompilao.
(ArecentenormamaisC99permitetambmumaformadematrizesdecomprimentovarivel.)Noentanto,
tambmpossvelalocarumblocodememria(detamanhoarbitrrio)emtempodeexecuo,usandoa
bibliotecapadromallocfuno,etratlocomoumMatriz.Cunificaodematrizeseponteirossignificaque
arraysdeclaradoseestesalocadosdinamicamentearrayssimuladossopraticamenteintercambiveis.
Desdematrizessosempreacedidos(emvigor)atravsdeponteiros,acessosdematrizsotipicamenteno
verificadaemrelaoaotamanhodamatrizsubjacente,emboraalgunscompiladorespodefornecerverificao
delimitescomoumaopo.[30]delimitesdematrizviolaesso,portanto,possvelebastantecomumem
cdigodescuidadamenteescrita,epodelevaravriasrepercusses,incluindomemriailegalacessos,
corrupodedados,estourosdebuffer,etempodeexecuoexcees.Seaverificaodelimitesfor
desejada,eladeveserfeitamanualmente.
Cnotemumadisposioespecialparadeclarararraysmultidimensionais,massimdependederecurso
dentrodosistemadetipoparadeclarararraysdearrays,querealizaefetivamenteamesmacoisa.Osvaloresdo
ndicede"matrizmultidimensional"resultantepodeserpensadocomooaumentonaordemdelinhaprincipal
.
https://en.wikipedia.org/wiki/C_(programming_language) 11/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Matrizesmultidimensionaissocomumenteutilizadosemalgoritmosnumricos(principalmentedaApplied
lgebralinear)paraarmazenarasmatrizes.AestruturadoarrayCbemadequadaparaestatarefaespecfica.
Noentanto,umavezqueasmatrizessopassadasapenascomoponteiros,oslimitesdamatrizdevemser
conhecidosvaloresfixosouentoexplicitamentepassadosparaqualquersubrotinaqueosnecessite,ematrizes
dematrizesdinamicamentedimensionadasnopodemseracessadasusandoduplaindexao.(Umasoluo
paraissoalocaramatrizcomum"vetordelinha"adicionaldeponteirosparaascolunas.)
C99introduzidos"matrizesdecomprimentovarivel"queabordamalguns,masnotodososproblemascom
ordinriasarraysC.
Matrizponteiropermutabilidade
Anotaosubscritax[i](ondexdesignaumponteiro)umacarsintticopara*(x+i).[31]Aproveitandoo
conhecimentodocompiladordotipodeponteiro,oendereoquex+iapontaparanooendereodebase
(apontadaporx)incrementadoemibytes,massimestdefinidaparaseroendereodebaseincrementadopor
imultiplicadapelotamanhodeumelementoquexapontapara.Destemodo,x[i]designaoi+1simoelemento
damatriz.
Almdisso,namaioriadoscontextosdeexpresso(aexceonotvelcomooperandodesizeof),onomede
umamatrizautomaticamenteconvertidoparaumponteiroparaoprimeiroelementodamatriz.Issoimplica
queumarraynuncacopiadocomoumtodoquandonomeadocomoumargumentoparaumafuno,mas
apenasoendereodoseuprimeiroelementopassado.Portanto,apesardechamadasdefunoemusoC
passarporvalorsemntica,asmatrizesestoemvigorpassadosporreferncia.
Otamanhodeumelementopodeserdeterminadaaplicandoooperadorsizeofaqualquerelementodeno
referenciadox,comoemn=sizeof*xoun=sizeofx[0],eonmerodeelementosemumamatrizdeclarada
ApodeserdeterminadacomosizeofA/sizeofA[0].Esteltimosseaplicaaosnomesdematriz:as
variveisdeclaradascomsubscritos(intA[20]).DevidosemnticadeC,nopossveldeterminaro
tamanhointeirodematrizesatravsdeponteirosparaarraysouaquelescriadosporalocaodinmica(
malloc)decdigo,taiscomosizeofarr/sizeofarr[0](emquearrdesignaumponteiro)noirfuncionar
desdequeocompiladorassumeotamanhodoponteiroemsiestasersolicitada.[32][33]Desdeargumentosde
nomedematrizparasizeofnosoconvertidosparaponteiros,elesnoapresentamessaambiguidade.No
entanto,matrizescriadaspelaalocaodinmicasoacessadosporponteirosemvezdevariveisdematriz
verdadeiras,entoelessofremdosmesmossizeofproblemascomoponteirosdematriz.
Assim,apesardestaaparenteequivalnciaentrematrizeponteirovariveis,aindahumadistinoaserfeita
entreeles.Mesmoqueonomedeumamatriz,namaioriadoscontextosdeexpresso,convertidoemum
ponteiro(paraseuprimeiroelemento),esteponteironoocupanenhumarmazenamentoonomedamatrizno
umlvalor,eseuendereoumaconstante,aocontrriodeumavarivelponteiro.Conseqentemente,oque
umamatriz"apontapara"nopodeseralterada,eimpossvelatribuirumnovoendereoaumnomede
matriz.Contedodamatrizpodesercopiado,noentanto,usandoamemcpyfuno,ouacessandooselementos
individuais.
Gerenciamentodememria
Umadasfunesmaisimportantesdeumalinguagemdeprogramaoproporcionarfacilidadesparao
gerenciamentodememriaeosobjetosqueestoarmazenadosnamemria.Cfornecetrsmaneirasdistintas
paraalocarmemriaparaobjetos:[27]
Alocaodememriaesttica:oespaoparaoobjetofornecidonobinrioemtempodecompilao
estesobjectostmumaextenso(outempodevida),enquantoobinrioquecontmdelescarregadona
memria.
Alocaodememriaautomtica:objetostemporriospodemserarmazenadosnapilha,eesseespao
automaticamenteliberadoereutilizvelapsoblocoemqueelassodeclaradasencerrado.
https://en.wikipedia.org/wiki/C_(programming_language) 12/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Alocaodinmicadememria:blocosdememriadetamanhoarbitrriopodesersolicitadoemtempo
deexecuousandofunesdebiblioteca,taiscomomallocapartirdeumaregiodememriachamado
depilhaestesblocospersistiratqueposteriormenteliberadoparareutilizaochamandoafunode
bibliotecareallocoufree
Estastrsabordagenssoapropriadasemsituaesdiferentesetmvriascompensaes.Porexemplo,a
alocaodememriaestticatempoucasobrecargadealocao,aalocaoautomticapodeenvolverum
poucomaisdesobrecarga,ealocaodememriadinmicapodepotencialmenteterumagrandequantidadede
sobrecargaparaalocaoedesalocao.Anaturezapersistentedeobjetosestticostilparamanter
informaesdeestadoatravsdechamadasdefuno,aalocaoautomticafcildeusar,masoespaode
pilhatipicamentemuitomaislimitadoetransitriodoqueamemriaestticaouoespaodepilhaea
alocaodememriadinmicapermiteaalocaoconvenientedeobjetoscujosTamanhoconhecidosomente
emtempodeexecuo.AmaioriadosprogramasdeCfazusoextensivodetodosostrs.
Semprequepossvel,aalocaoautomticaouestticageralmentemaissimplesporqueoarmazenamento
gerenciadopelocompilador,liberandooprogramadordatarefapotencialmentepropensaaerrosdealocare
liberarmanualmenteoarmazenamento.Noentanto,muitasestruturasdedadospodemmudardetamanhoem
tempodeexecuoe,umavezquealocaesestticas(ealocaesautomticasantesdeC99)devemterum
tamanhofixoemtempodecompilao,existemmuitassituaesemqueaalocaodinmicanecessria.[27]
AntesdopadroC99,matrizesdetamanhovarivelforamumexemplocomumdeste.(Vejaoartigosobre
mallocumexemplodematrizesalocadasdinamicamente.)Aocontrriodealocaoautomtica,quepodefalhar
emtempodeexecuocomconsequnciasdescontroladas,asfunesdealocaodinmicaretornaruma
indicao(naformadeumvalordeponteironulo),quandooarmazenamentonecessrionopodeSer
alocados.(Alocaoestticaquemuitograndenormalmentedetectadapelovinculadoroucarregador,antes
deoprogramapodeatmesmocomearaexecuo.)
Salvoespecificaoemcontrrio,osobjectosestticoscontmvaloresdeponteirozeroounulonoarranquedo
programa.Objetosalocadosautomaticamenteedinamicamentesoinicializadossomenteseumvalorinicial
forexplicitamenteespecificadocasocontrrio,elesinicialmentetervaloresindeterminados(tipicamente,
qualquerquesejaopadrodobitpassaaestarpresentenaarmazenamento,quepodeatnorepresentamum
valorvlidoparaotipo).Seoprogramatentaacessarumvalornoinicializado,osresultadossoindefinidos.
Muitoscompiladoresmodernostentamdetectarealertarsobreesteproblema,masambososfalsospositivose
falsosnegativospodemocorrer.
Outraquestoqueaalocaodememriadoheaptemdesersincronizadacomoseuusorealemqualquer
programaparaqueelepossaserreutilizadotantoquantopossvel.Porexemplo,seonicoponteiroparauma
alocaodememriaheapsaidoescopooutenhaoseuvalorsubstitudoantesfree()chamado,emseguida,
queamemrianopodeserrecuperadoparareutilizaoposteriore,essencialmente,perdeuparao
programa,umfenmenoconhecidocomoumafugadememria.Poroutrolado,possvelqueamemriaseja
liberada,mascontinueaserreferenciada,levandoaresultadosimprevisveis.Normalmente,ossintomas
apareceroemumapartedoprogramamuitodistantedoerroreal,tornandodifcilrastrearoproblema.(Tais
questessomelhoradasdelnguascomacoletadelixoautomtica.)
Bibliotecas
AlinguagemdeprogramaoCutilizabibliotecascomoseuprincipalmtododeextenso.EmC,uma
bibliotecaumconjuntodefunescontidasemumnicoarquivo"archive".Cadabibliotecatem,tipicamente,
umficheirodecabealho,oqualcontmosprottiposdasfunescontidasdentrodabibliotecaquepodeser
utilizadoporumprograma,edeclaraesdetiposdedadosespeciaisemacrosmbolosutilizadoscomestas
funes.Paraqueumprogramaparausarumabiblioteca,eledeveincluiroarquivodecabealhodabiblioteca,
eabibliotecadeveservinculadocomoprograma,queemmuitoscasosrequersinalizadoresdecompilador(por
exemplo,lm,abreviaode"ligaodabibliotecadematemtica").[27]
https://en.wikipedia.org/wiki/C_(programming_language) 13/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
AbibliotecamaiscomumCabibliotecapadroC,queespecificadopeloISOeANSICnormasevemcom
todasasimplementaesC(implementaesquevisamambienteslimitados,taiscomosistemasembarcados
podemfornecerapenasumsubconjuntodabibliotecapadro).Estabibliotecaoferecesuporteaentradaesada
defluxo,alocaodememria,matemtica,seqnciasdecaracteresevaloresdetempo.Vrioscabealhos
padroseparadas(porexemplo,stdio.h)especificaasinterfacesparaessaseoutrasinstalaesdabiblioteca
padro.
OutroconjuntocomumdefunesdebibliotecaCsoaquelesusadosporaplicativosvoltadosespecificamente
paraUnixeUnixlikesistemas,especialmentefunesqueproporcionamumainterfaceparaoncleo.Estas
funessodetalhadasemvriospadrescomoPOSIXeoSingleUNIXSpecification.
UmavezquemuitosprogramasforamescritosemC,humagrandevariedadedeoutrasbibliotecas
disponveis.BibliotecassomuitasvezesescritosemC,porquecompiladoresCgerareficientecdigode
objetoprogramadores,emseguida,criarinterfacesparaabibliotecaparaqueasrotinaspodemserutilizadosa
partirdelinguagensdealtonvelcomoJava,PerlePython.[27]
Ferramentasdelinguagem
VriasferramentasforamdesenvolvidasparaajudarosprogramadoresCaencontrarecorrigirdeclaraescom
comportamentoindefinidooupossivelmenteexpresseserrneas,commaiorrigordoqueofornecidopelo
compilador.Aferramentalintfoioprimeiro,levandoamuitosoutros.
Automatizadoverificaodecdigofonteeauditoriasobenficosemqualqueridioma,eporCexistem
muitasdessasferramentas,taiscomoLint.UmaprticacomumusarLintparadetectarcdigoquestionvel
quandoumprogramaescritopelaprimeiravez.UmavezqueumprogramapassaLint,elecompilado
usandoocompiladorC.Almdisso,muitoscompiladorespodemopcionalmenteavisarsobresintaticamente
construesvlidasquesosusceptveisderealmentesererros.MISRACumconjuntoproprietriode
diretrizesparaevitartalcdigoquestionvel,desenvolvidoparasistemasembarcados.[34]
Htambmcompiladores,bibliotecasemecanismosdenveldesistemaoperacionalparaexecutaraesque
nosoumapartepadrodeC,comoaverificaodelimitesparaarrays,adetecodeestourodebuffer,
serializao,memriadinmicademonitoramentoecoletadelixoautomtica.
FerramentascomooPurifyouValgrindevinculaocombibliotecascontendoversesespeciaisdasfunes
dealocaodememriapodeajudaradescobrirerrosdeexecuonousodememria.
Usos
Camplamenteutilizadopara"programaodosistema",incluindoaimplementaodesistemas
operacionaisesistemasembarcadosaplicaes,porqueocdigoC,quandoescritosparaaportabilidade,pode
serusadonamaioriadoscasos,noentanto,quandonecessrio,ocdigoespecficodosistemapodeserusado
paraacessarhardwareespecficoendereoseexecutartipotrocadilhosparacorresponderaosrequisitosde
interfaceimpostasexternamente,comumabaixadetempodeexecuodemandaderecursosdosistema.C
tambmpodeserusadoparaaprogramaodesiteusandoCGIcomouma"portadeentrada"parainformaes
entreoaplicativodaWeb,oservidoreobrowser.[36]Cmuitasvezesescolhidoemdetrimentodelinguagens
interpretadasporcausadesuavelocidade,estabilidadeedisponibilidadequaseuniversal.[37]
UmaconsequnciadaampladisponibilidadeeeficinciadeCquecompiladores,bibliotecaseintrpretesde
outraslinguagensdeprogramaosomuitasvezesimplementadoemC.Asimplementaesprimriasde
Python,Perl5ePHP,porexemplo,sotodosescritosemC.
Comoacamadadeabstraofinaeasobrecargabaixa,Cpermitequeosprogramadorescriem
implementaeseficientesdealgoritmoseestruturasdedados,teisparaprogramascomputacionalmente
intensos.Porexemplo,aAritmticaBibliotecaGNUMultiplePrecision,oGNUScientificLibrary,
https://en.wikipedia.org/wiki/C_(programming_language) 14/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
MathematicaeMATLABesto
completamenteouparcialmenteescrito
emC.
Cporvezesutilizadocomouma
linguagemintermediriapor
implementaesdeoutraslnguas.Esta
abordagempodeserutilizadaparaa
portabilidadeouconveninciaUsando
Ccomoumalinguagemintermediria,
nosonecessriosgeradoresdecdigo
adicionaisespecficosdamquina.C
temalgunsrecursos,comoasdiretivas
deprprocessadordenmerodelinhae
asvrgulassuprfluasopcionaisnofinal
daslistasdeinicializao,quesuportam
acompilaodocdigogerado.No
entanto,algumasdeficinciasdeCter
Ondicetiobegrficode20022015,quemostraumacomparaoda
solicitadoodesenvolvimentodeoutras
linguagensbaseadasemCconcebidos popularidadedevriaslinguagensdeprogramao [35]
especificamenteparautilizaocomo
lnguasintermedirias,taiscomoC.
Ctambmtemsidoamplamenteusadoparaimplementardeusuriofinalaplicaes.Noentanto,esses
aplicativostambmpodemserescritosemlinguagensmaisrecentesedenvelsuperior.
Idiomasrelacionados
Ctemtantodirectacomoindirectamenteinfluenciadasmuitaslnguasposteriores,comoC#,D,Go,Java,
JavaScript,Limbo,LPC,Perl,PHP,Python,edeUnixshellC.Ainflunciamaisdifundidatemsido
sinttica:todasaslnguasmencionadascombinaradeclaraoe(maisoumenosreconhecvel)expresso
sintaxedoCcomsistemasdotipo,modelosdedadose/ouestruturasdeprogramasemgrandeescalaque
diferemdosdeC,svezesradicalmente.
ExistemvriosintrpretesCouquaseC,incluindoCheCINT,quetambmpodeserusadoparascripting.
Quandolinguagensorientadasaobjetotornousepopular,C++eObjectiveCforamduasextensesdiferentes
deCqueforneceuascapacidadesorientadasaobjetos.Ambasaslnguasforamoriginalmenteimplementado
comocompiladoresfonteafonteCdigofontefoiconvertidoemCe,emseguida,compiladocomum
compiladorC.
OC++linguagemdeprogramaofoiconcebidoporBjarneStroustrupcomoumaabordagemparafornecer
orientadaaobjetosfuncionalidadecomumasintaxeClike.[38]C++acrescentamaisforadigitao,escopo,e
outrasferramentasteisnaprogramaoorientadaaobjetos,epermiteaprogramaogenricaatravsde
modelos.QuaseumsuperconjuntodeC,C++agorasuportaamaiorparteC,comalgumasexcees.
ObjectiveCfoioriginalmenteummuito"fina"camadaemcimadeC,econtinuaaserumsuperrigorosadoC
quepermiteaprogramaoorientadaaobjetosusandoumparadigmahbridoedinmico/estticodedigitao.
ObjectiveCderivasuasintaxedoCeSmalltalk:sintaxequeenvolveoprprocessamento,expresses,
declaraesdefunoechamadasdefunoherdadodeC,enquantoasintaxepararecursosorientadosa
objetosprovmoriginalmentedoSmalltalk.
AlmdeC++eObjectiveC,Ch,cilkeUnifiedParallelCsoquasesupersetsdeC.
https://en.wikipedia.org/wiki/C_(programming_language) 15/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Vejatambm
ComparaodePascaleC
Comparaodelinguagensdeprogramao
ConcursoInternacionaldeCdigoCOfuscado
ListadelinguagensdeprogramaobaseadasemC
ListadecompiladoresdeC
Notas
a.Ocdigodeexemplooriginalircompilarnamaioriadoscompiladoresmodernosquenoestoemestrita
conformidadecomopadromodo,masnototalmenteemconformidadecomosrequisitosdeambososC89ouC99.
Defato,C99requerqueumamensagemdediagnsticosejaproduzida.
b.Amainfunotemdoisargumentos,intargcechar*argv[],respectivamente,oquepodeserusadoparalidar
comargumentosdelinhadecomando.OpadroISOC(seco5.1.2.2.1)exigequeambasasformasdemainaapoiar,
queotratamentoespecialnoconcedidoaqualqueroutrafuno.
Referncias
1.Kernighan,BrianW.Ritchie,DennisM.(Fevereirode1978).ALinguagemdeProgramaoC(1ed.).Englewood
Cliffs,NJ:PrenticeHall.ISBN0131101633.ConsideradopormuitoscomoarefernciaautorizadaemC.
2.Ritchie(1993):"Thompsontinhafeitoumabrevetentativadeproduzirumsistemacodificadoemumaversoinicial
doCantesestruturasem1972,masdeuseoesforo."
3.Ritchie(1993):"OesquemadecomposiodotipoadotadapelaCdevedvidaconsidervelparaAlgol68,embora
issonoaconteceu,talvez,emergiremumaformaqueosaderentesdeAlgolaprovaria."
4."VerilogHDL(eC)"(PDF).AEscoladePesquisadeCinciadaComputaodaUniversidadeNacionaldaAustrlia.
20100603.Retirado2013/08/19."Dcadade1980:VerilogintroduzidopelaprimeiravezVeriloginspiradona
linguagemdeprogramaoC"
5.Ritchie(1993)
6.Lawlis,PatriciaK.(Agostode1997)."Diretrizesparaescolherumalinguagemdecomputador:oapoioorganizao
visionria".AdaInformationClearinghouse.Retirado18dedeJulhodede2006.
7."LinguagemdeProgramaodepopularidade".2009.Retirado16dedeJaneirode2009.
8."IndexComunidadeTIOBEProgramming".2009.Obtido6deMaiode2009.
9.Ritchie,DennisM.(Marode1993)."ODesenvolvimentodaLinguagemC".AvisosACMSIGPLAN.28(3):201
208.doi:10,1145/155.360,155580.
10.UlfBilting&JanSkansholm"VgenatC"(sueco)quesignifica"TheRoadtoC",terceiraedio,Studentlitteratur,
2000,pgina3.ISBN9144014686.
11.Johnson,SCRitchie,DM(1978)."PortabilidadedeprogramasemCedoSistemaUNIX".BellSystemTech.J.57
(6):20212048.doi:10.1002/j.15387305.1978.tb02141.x.Retirado16dedeDezembrode2012.(Nota:esta
refernciaumadigitalizaoOCRdooriginalecontmumarepresentaodefalhadeOCR"IBM370"como"IBM
310".)
12.McIlroy,MD(1987).UmleitorResearchUnix:trechosanotadosdoProgrammerManual,19711986(PDF)
(Relatriotcnico).CSTR.BellLabs.P.10.139.
13.Stallings,William."SistemasOperacionais:InternosePrincpiosdeDesign",5edio,pgina91.Pearson
Education,Inc.2005.
14.Kernighan,BrianW.Ritchie,DennisM.(Marode1988).ALinguagemdeProgramaoC(2ed.).Englewood
Cliffs,NJ:PrenticeHall.ISBN0131103628.
15.Stroustrup,Bjarne(2002).Arivalidadeentreirmos:CeC++(PDF)(Relatrio).AT&TLabs.
16."JTC1/SC22/WG14C".Homepage.ISO/IEC.Retirado2deJunhode2011.
17.AndrewBinstock(12deoutubrode2011)."EntrevistacomHerbSutter".Dr.Dobbs.Retirado7deSetembrode,
2013.
18."18037TR:EmbutidoC"(PDF).ISO/IEC.Retirado26dedeJulhode2011.
19.Harbison,SamuelP.Steele,GuyL.(2002).C:UmManualdeReferncia(5ed.).EnglewoodCliffs,NJ:Prentice
Hall.ISBN013089592X.ContmumaBNFgramticaparaC.
20.Kernighan,BrianW.Ritchie,DennisM.(1996).ALinguagemdeProgramaoC(2ed.).PrenticeHall.P.192.
ISBN730202412X.
21.Page3doKoriginal&R[1]
22.ISO/IEC9899:201x(ISOC11)ComissoProjecto(http://www.openstd.org/jtc1/sc22/wg14/www/docs/n1548.pdf)
https://en.wikipedia.org/wiki/C_(programming_language) 16/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
23.Kernighan,BrianW.Ritchie,DennisM.(1996).ALinguagemdeProgramaoC(2ed.).PrenticeHall.pp.192,
259.ISBN730202412X.
24."10erroscomunsdeprogramaoemC++".Cs.ucr.edu.Retirado26dedeJunhode2009.
25.Schultz,Thomas(2004).Cea8051(3ed.).Otsego,MI:PageFreePublishingInc.p.20.ISBN158961237X.
Retirado10deFevereirode2012.
26.Page6doKoriginal&R[1]
27.Klemens,Ben(2013).21stCenturyC.O'ReillyMedia.ISBN1449327141.
28.Feuer,AlanR.Gehani,NarainH.(Maro1982)."ComparaodaslinguagensdeprogramaoCePascal".ACM
Computing.14(1):7392.doi:10,1145/356.869,356872.(subscrioexigida(ajuda)).
29.pgina122daK&R2[14]
30.Porexemplo,gccfornece_FORTIFY_SOURCE."Recursosdesegurana:CompilartempodebufferChecks
(FORTIFY_SOURCE)".fedoraproject.org.Retirado2012/08/05.
31.Raymond,EricS.(11Outubro1996).DicionrioTheNewHacker(3ed.).MITPressione.P.432.ISBN9780
262680929.Retirado5deAgostode2012.
32.Summit,Steve."comp.lang.cPerguntasFrequentes6,23".Obtido6deMarode,2013.
33.Summit,Steve."comp.lang.cPerguntasFrequentes7,28".Obtido6deMarode,2013.
34."ManPginadefiapos(SeoFreeBSD1)".unix.com.2001/05/24.Retirado2014/07/15.
35.McMillan,Robert(2013/08/01)."JavaestperdendoseuMojo?".Comfios.
36.SourcebookdoDr.Dobb.EUA:MillerFreeman,Inc.NovembroDezembrode1995.
37."UsandoCparaprogramaoCGI".Linuxjournal.com.01demarode2005.Retirado4deJaneirode2010.
38.Stroustrup,Bjarne(1993)."UmaHistriadeC++:19791991"(PDF).Retirado9deJunhode2011.
Fontes
Ritchie,DennisM.(1993).ODesenvolvimentodaLinguagemC.OsegundoACMSIGPLANHistoryof
ProgrammingLanguagesConference(HOPLII).Cambridge,MA,EUA2023abril,1993:ACM.Pp.
201208.doi:10,1145/154.766,155580.ISBN0897915704.Retirado2014/11/04.
Almdissoleitura
Banahan,M.Brady,D.Doran,M.(1991).OCReserve(2ed.).AddisonWesley.
King,KN(Abrilde2008).CProgramming:UmaAbordagemModerna(2ed.).Norton.ISBN9780
393979503.
Thompson,Ken."ANewCCompiler"(PDF).MurrayHill,NovaJersey:AT&TBellLaboratories.
Feuer,AlanR.(1998).OCPuzzleBook(1,revistaedimpresso.).AddisonWesley.ISBN9780201
604610.
Ligaesexternas
SiteoficialdoGrupodeTrabalhodaISOC(http://www.openstd.org/jtc1/sc22/wg14/)
Comp.lang.cPerguntasFreqentes(http://www.cfaq.com/)
ISO/IEC9899(http://www.openstd.org/JTC1/SC22/WG14/www/standards),documentosCoficiais
publicamentedisponveis,incluindooC99Fundamentao
"C99comrectificaesTcnicoTC1,TC2eTC3includo"(PDF).(3,61MB)
UmaHistriadeC(http://csapp.cs.cmu.edu/3e/docs/chistory.html),porDennisRitchie
Retiradode"https://en.wikipedia.org/w/index.php?title=C_(programming_language)&oldid=760173334"
https://en.wikipedia.org/wiki/C_(programming_language) 17/18
15/01/2017 C(linguagemdeprogramao)Wikipdia,aenciclopdialivre
Estapginafoimodificadapelaltimavezem15dejaneirode2017,s11:37.
OtextoestdisponvelsobaLicenaCreativeCommonsAtribuioCompartilhamentopelamesma
Termosadicionaispodemseraplicados.Aoutilizarestesite,vocconcordacomosTermosdeUsoe
PolticadePrivacidade.WikipdiaumamarcacomercialregistradadaWikimediaFoundation,Inc.,
umaorganizaosemfinslucrativos.
https://en.wikipedia.org/wiki/C_(programming_language) 18/18