Вы находитесь на странице: 1из 18

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

C(linguagemdeprogramação)

Origem:Wikipédia,aenciclopédialivre.

computadorlinguagemdeprogramação,apoiando

recursão,enquantoumsistemadetipoestáticoimpedeque

muitasoperaçõesnãointencionais.Pordesign,Cfornece

construçõesquemapeiamdeformaeficienteparatípicas

instruçõesdemáquinae,portanto,temencontradoutilização

duradouraemaplicaçõesqueanteriormentetinhasido

computadoresquevãodesdesupercomputadorespara

CfoioriginalmentedesenvolvidoporDennisRitchieentre 1969e1973,noBellLabs, [5] eusadoparare­ implementaçãodoUnixsistemaoperacional. [6] Desdeentão setornouumadaslinguagensdeprogramaçãomaisusadas detodosostempos, [7][8] comCcompiladoresdevários fornecedoresdisponíveisparaamaioriadosexistentes arquiteturasdecomputadoresesistemasoperacionais.Cfoi padronizadapeloAmericanNationalStandardsInstitute

(ANSI)desde1989(verANSIC)e,posteriormente,pela

Conteúdo

1 projeto

1 projeto

 
2 Visãogeral

2 Visãogeral

2.1 Relaçõescomoutraslínguas

2.1

Relaçõescomoutraslínguas

3 História

3 História

3.1 desenvolvimentosadiantados

3.1 desenvolvimentosadiantados

3.2 K&RC

3.2 K&RC

3.3 ANSICeISOC

3.3 ANSICeISOC

3.4 C99

3.4 C99

3,5 C11

3,5 C11

3.6 EmbutidoC

3.6

EmbutidoC

4 Sintaxe

4 Sintaxe

4.1 Conjuntodecaracteres

4.1 Conjuntodecaracteres

4.2 Aspalavrasreservadas

4.2 Aspalavrasreservadas

4.3 Operadores

4.3 Operadores

5 "Olá,mundo"exemplo

5 "Olá,mundo"exemplo

6 tiposdedados

6 tiposdedados

6.1 Ponteiros

6.1 Ponteiros

6.2 Arrays

6.2 Arrays

6.3 permutabilidadematrizponteiro

6.3 permutabilidadematrizponteiro

7 Gerenciamentodememória

7 Gerenciamentodememória

8 Bibliotecas

8 Bibliotecas

 
9 Ferramentasdeidioma

9 Ferramentasdeidioma

10 Usos

10 Usos

 
11 idiomasrelacionados

11 idiomasrelacionados

C

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

12 Vertambém

12 Vertambém

13 Notas

13 Notas

14 Referências

14 Referências

15 Fontes

15 Fontes

16 Leituraadicional

16 Leituraadicional

17 Ligaçõesexternas

17 Ligaçõesexternas

ProgramaçãoC emWikibooks

ProgramaçãoCemWikibooks

Projeto

Céumimperativoprocessualidioma.Elefoiprojetadoparasercompiladousandoumrelativamentesimples

compilador,paraforneceracessodebaixonívelparaamemória,paraproporcionarconstruçõesdelinguagem

assembly,porexemplo,naprogramaçãodosistema.

Apesardassuascapacidadesdebaixonível,alinguagemfoiprojetadaparaincentivarmulti­plataformade

programação.UmcompatívelcomospadrõeseportablyprogramaCescritopodesercompiladoparauma

amplavariedadedeplataformasdecomputadoresesistemasoperacionaiscompoucasmudançasemseu

código­fonte.Alinguagemtornou­sedisponívelemumavastagamadeplataformas,desdeincorporadas

Visãogeral

ponteirovalores.TextoCfontedoprogramaélivredeformato,usandoopontoevírgulacomoumadeclaração

terminatorechavesparaagruparblocosdedeclarações.

AlinguagemCtambémapresentaasseguintescaracterísticas:

Háumpequenonúmero,fixadepalavras­chave,incluindoumconjuntocompletodefluxodecontrole primitivos:for,if/else,while,switch,edo/while.Nomesdefinidospelousuárionãosãodistinguidos depalavras­chaveporqualquertipodesigilo. Háumgrandenúmerodeoperadoresaritméticoselógicos,taiscomo+,+=,++,&,~,etc. Maisdoqueumatarefapodeserrealizadaemumaúnicainstrução. Osvaloresderetornodafunçãopodemserignoradosquandonãosãonecessários. Adigitaçãoéestática,masfracamenteaplicadas:todososdadostemumtipo,masconversões implícitaspodeserrealizada. Declaraçãosintaxecontextodeusoimita.Cnãotempalavra­chave"definir";Emvezdisso,uma declaraçãocomeçandocomonomedeumtipoétomadacomoumadeclaração.Nãoexistepalavra­chave "função";Emvezdisso,umafunçãoéindicadapelosparêntesesdeumalistadeargumentos. Definidospelousuário(typedeftipos)ecompostossãopossíveis. Heterogêneostiposdedadosagregados(struct)permitemqueoselementosdedados relacionadosaseracessadoeatribuídocomoumaunidade. Matrizindexaçãoéumanotaçãosecundário,definidoemtermosdearitméticadeponteiro.Ao contráriodasestruturas,asmatrizesnãosãoobjetosdeprimeiraclasse;Elesnãopodemser atribuídosoucomparadosusandooperadoresincorporadosúnicos.Nãoexistepalavra­chave "matriz",emusooudefinição;Emvezdisso,osparêntesisrectosindicammatrizes

sintacticamente,porexemplomonth[11].

Tiposenumeradossãopossíveiscomaenumpalavra­chave.Elesnãosãomarcados,esãolivremente

interconvertiblescomnúmerosinteiros.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Cordasnãosãoumtipodedadosseparada,massãoconvencionalmenteimplementadoscomo

terminaçãonulaarraysdecaracteres.

Acessodebaixonívelamemóriadocomputadorépossívelatravésdaconversãodeendereçosde

máquinaparadigitadasponteiros.

Procedimentos(sub­rotinasnãoretornamvalores)sãoumcasoespecialdafunção,comumtipode

retornonãotipadovoid.

Asfunçõesnãopodemserdefinidasnoâmbitolexicaldeoutrasfunções.

Funçãoedadosponteirospermitiradhocpolimorfismoemtempodeexecução.

Háumaformabásicademodularidade:arquivospodemsercompiladosseparadamenteeligadasem

conjunto,comcontrolesobrequaisfunçõesedadosobjetossãovisíveisparaoutrosarquivosviastatice

externatributos.

Funcionalidadecomplexa,comoI/O,cadeiademanipulaçãoefunçõesmatemáticassão

consistentementedelegadaarotinasdebiblioteca.

meiodebibliotecasexternas(porexemplo,ocoletordelixoBoehmouosistemadeobjetoGLib).

Relaçõescomoutrosidiomas

MuitaslínguasposterioresteremprestadodirectaouindirectamentedeC,incluindoC++,D,Go,Rust,Java ,JavaScript,Limbo,LPC,C#,Objective­C,Perl,PHP,Python,Swift,Verilog(descriçãodehardware idioma), [4] edoUnixshellC.Estaslínguastêmatraídomuitasdassuasestruturasdecontroleeoutros recursosbásicosdeC.Amaioriadeles(comPythonéaexceçãomaisdramática)tambémsãomuito sintaticamentesemelhanteaC,emgeral,eelestendemacombinaraexpressãoeafirmaçãoreconhecível sintaxeCcomsistemassubjacentestipo,modelosdedadosesemânticaquepodeserradicalmentediferente.

História

Desenvolvimentosinício

AorigemdoCestáintimamenteligadaaodesenvolvimentodoUnix sistemaoperacional,originalmenteimplementadoemlinguagem

idéiasdoscolegas.Eventualmente,elesdecidiramportarosistema

operacionalparaumPDP­11.AversãoPDP­11originaldoUnixfoi

desenvolvidaemlinguagemassembly.Osdesenvolvedoresestavam considerandoreescreverosistemautilizandoalinguagemB,versão simplificadadeThompsondeBCPL. [9] Noentantoaincapacidadede

BparatirarpartidodealgumasdascaracterísticasdoPDP­11,

nomeadamentebytedeendereçamento,levouaC.OnomeCfoi escolhidosimplesmentecomooseguinte,depoisB. [10]

KenThompson (esquerda)com DennisRitchie (àdireita,oinventor dalinguagemdeprogramaçãoC)

KenThompson(esquerda)com

DennisRitchie(àdireita,oinventor

dalinguagemdeprogramaçãoC)

OdesenvolvimentodeCcomeçouem1972nosistemaPDP­11Unix

[11] eapareceupelaprimeiraveznaversão2Unix. [12] Alínguanãofoiinicialmenteprojetadocom portabilidadeemmente,maslogocorreuemdiferentesplataformas,bemcomo:umcompiladorparaa

Honeywell6000foiescritonoprimeiroanodahistóriadaC,enquantoumIBMSystem/370portoseguidoem

breve. [1][11]

Tambémem1972,umagrandepartedoUnixfoireescritoemC. [13] Em1973,comaadiçãodestructtipos,a linguagemCtornou­sepoderosoosuficienteparaqueamaiorpartedoUnix'sdokernelestavaagoraemC.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Unixfoiumdosprimeiroskernelsdosistemaoperacionalimplementadasemumidiomadiferentedoconjunto. CasosanterioresincluemoMulticssistemaquefoiescritoemPL/I)eControleMestrePrograma(MCP)para

aBurroughsB5000escritoemALGOLem1961.Emvoltade1977,RitchieeStephenC.Johnsonfezmais

alteraçõesparaoidiomaparafacilitarPortabilidadedosistemaoperacionalUnix.JohnsonportátilCCompiler serviudebaseparaváriasimplementaçõesdeCemnovasplataformas. [11]

K&RC

CProgrammingLanguage. [1] Estelivro,conhecidoporprogramadoresC como"K&R",serviupormuitosanoscomouminformalespecificaçãoda língua.AversãodeCquesedescreveécomumentereferidocomoCK&R.A segundaediçãodolivro [14] abrangeatardeANSICpadrão,descritoabaixo.

Acapadolivro, alinguagem deprogramaçãoC ,primeira ediçãopor BrianKernighan e DennisRitchie

Acapadolivro,alinguagem

deprogramaçãoC,primeira

ediçãoporBrianKernighane

AK&Rintroduziuváriosrecursosdelinguagem:

BibliotecadeE/Spadrão

long inttipodedados tipodedados

unsigned inttipodedados Operadoresdeatribuiçãocompostosdeforma(talcomo)foramalterados tipodedados Operadoresdeatribuiçãocompostosdeforma(talcomo)foramalterados paraaforma(istoé,)pararemoveraambiguidadesemânticacriadopor construções,taiscomo,oqualtinhasidointerpretadascomo(decréscimo

de10)emvezdoquesedestinemeventualmente(deixarser­10).=op=‐

op=‐=i=‐10i =‐ 10ii = ‐10i

MesmoapósapublicaçãodanormaANSI1989,pormuitosanosK&RC

aindafoiconsideradoo"menordenominadorcomum",aoqueprogramadores

C­serestritoaomáximodeportabilidadefoidesejado,umavezquemuitos

compiladoresmaisantigosaindaestavamemuso,eporquecuidadosamenteescritoK&RCcódigopodeser

legalStandardCtambém.

NasprimeirasversõesdoC,apenasasfunçõesqueretornamoutrosdoqueostiposintdevemserdeclaradosse

usadoantesdadefiniçãodafunção;funçõesutilizadassemdeclaraçãopréviaforamPresume­sequetipode

retornoint.

Porexemplo:

longa some_function ();

/

* * Int / other_function ();

/

* Int * / calling_function ()

{

 

longa

test1 ;

 

registrar

/ * int * /

test2 ;

test1 = some_function ();

se

( test1

>

0 )

 

test2

=

0

;

 

outra

test2 = other_function (); voltar test2 ;

}

OsinttiposespecíficosquesãocomentadaspoderiaseromitidanoK&RC,massãonecessáriasnormas

posteriores.

DesdeK&Rdeclaraçõesdefunçãonãoincluemqualquerinformaçãosobreosargumentosdafunção,

parâmetrosdefunçãotipochequesnãoforamrealizados,emboraalgunscompiladoresiriaemitiruma

mensagemdeavisoseumafunçãolocalfoichamadacomonúmeroerradodeargumentos,ousevárias

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

chamadasparaumafunçãoexternaUsadonúmerosdiferentesoutiposdeargumentos.Ferramentasseparadas,

comodoUnixlintutilitárioforamdesenvolvidosque(entreoutrascoisas)poderiaverificaraconsistênciado

usodefunçãoemváriosarquivosdeorigem.

NosanosseguintesàpublicaçãodaK&RC,váriosrecursosforamadicionadosàlinguagem,apoiadopor compiladoresdaAT&T(emparticularPCC [15] )ealgunsoutrosfornecedores.Estesincluem:

PCC [ 1 5 ] )ealgunsoutrosfornecedores.Estesincluem: void Funções(istoé,funçõessemvalorderetorno)

voidFunções(istoé,funçõessemvalorderetorno)

funçõesqueretornamstructouuniontipos(aoinvésdeponteiros)

atribuiçãodestructtiposdedados

Ograndenúmerodeextensõesefaltadeacordosobreumabibliotecapadrão,juntamentecomapopularidade

linguagemeofatodequenemmesmooUnixcompiladoresprecisamenteimplementadaaespecificaçãoK&

R,levouànecessidadedepadronização.

ANSICeISOC

Duranteofinaldosanos1970e1980,versõesdoCforamimplementadas

paraumaamplavariedadedecomputadoresmainframe,minicomputadorese

microcomputadores,incluindooIBMPC,comosuapopularidadecomeçou

aaumentarsignificativamente.

Em1983,oAmericanNationalStandardsInstitute(ANSI)formouuma

comissão,X3J11,paraestabelecerumaespecificaçãopadrãodeC.X3J11

baseopadrãoCsobreaimplementaçãoUnix;noentanto,aporçãonão­ portáteisdabibliotecaUnixCfoitransferidaparaoIEEEgrupodetrabalho

1003parasetornarabasepara1988POSIXpadrão.Em1989,opadrãoCfoi

ratificadocomoANSIX3.159­1989"LinguagemdeProgramaçãoC".Esta

versãodalinguagemémuitasvezesreferidacomoANSIC,StandardC,ou

àsvezesC89.

Em1990,opadrãoANSIC(comasalteraçõesdeformatação)foiadoptado

9899:1990,queéàsvezeschamadoC90.Portanto,ostermos"C89"e"C90"

referem­seàmesmalinguagemdeprogramação.

ANSI,comooutrosorganismosnacionaisdenormalização,nãomaisse desenvolveopadrãoCdeformaindependente,masadiaanorma

internacionalC,mantidopelogrupodetrabalhoISO/IECJTC1/SC22/WG14.Aadoçãonacionaldeuma

atualizaçãoaopadrãointernacionalocorretipicamentedentrodeumanodapublicaçãodaISO.

UmdosobjectivosdoprocessodenormalizaçãoCeraproduzirumsuperconjuntodoK&RC,incorporando

muitasdascaracterísticasnãooficiaisposteriormenteintroduzidas.Ocomitêdepadrõestambémincluiuvários

recursosadicionais,taiscomoprotótiposdefunção(emprestadodeC++),voidponteiros,suportepara

internacionaisconjuntosdecaractereselocaisemelhoriasdepré­processamento.Emboraasintaxeparaas

declaraçõesdeparâmetrosfoiaumentadoparaincluiroestilousadonoC++,aK&interfacedeRcontinuaram

aserpermitido,paracompatibilidadecomcódigofonteexistente.

C89ésuportadopeloscompiladoresCatuais,eamaioriadocódigoCqueestásendoescritohojeébaseado

nele.QualquerprogramaescritoapenasemPadrãoCesemquaisquerhipótesesdependentedehardwareserá

executadocorretamenteemqualquerplataformacomumaexecuçãoconformeC,dentrodeseuslimitesde

recursos.Semestasprecauções,osprogramaspodemcompilarapenasnumadeterminadaplataformaoucom

umcompiladorparticular,devido,porexemplo,comautilizaçãodebibliotecasdenão­convencionais,tais

comoGUIbibliotecas,ouumadependênciadeatributosespecíficosplataformacompiler­outaiscomoo

tamanhoexatodetiposdedadosebyteordenação.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

NoscasosemqueocódigodevesercompilabletantoporcompiladoresoubaseadoemCK&R­conforme

padrão,a

umcompiladorbaseadoemCK&RderecursosdisponíveissomentenaNormaC

STDC

macropodeserusadaparadividirocódigoemseçõesStandardeK&Rparaevitarousode

ApósoprocessodepadronizaçãoANSI/ISO,aespecificaçãodalinguagemCpermaneceurelativamente

estáticaporváriosanos.Em1995,foipublicadaaEmendaNormativa1ànormaCde1990(ISO/IEC9899/

AMD1:1995,conhecidainformalmentecomoC95)paracorrigiralgunsdetalheseacrescentarumsuportemais

extensoparaconjuntosdecaracteresinternacionais.

C99

OpadrãoCfoiposteriormenterevistonofinalde1990,levandoàpublicaçãodaISO/IEC9899:1999em

1999,queécomumentereferidocomo"C99".Desdeentão,foialteradatrêsvezesporCorrigendaTécnica. [16]

C99introduziuváriosnovosrecursos,incluindofunçõesembutidas,váriosnovostiposdedados(incluindo

long long inteumcomplextipopararepresentarnúmeroscomplexos),matrizesdecomprimentovariávele

membrosdamatrizflexível,suportemelhoradoparaIEEE754ponto,suporteflutuanteparamacrosvariádicos

(macrosdevariávelarity),esuporteparacomentáriosdeumalinhacomeçandocom//,comoemBCPLouC

++.MuitosdelesjáforamimplementadoscomoextensõesemvárioscompiladoresC.

C99éparaamaiorpartecompatívelcomC90,masémaisrígidoemalgunsaspectos;emparticular,uma

declaraçãoquenãotenhaumespecificadordetiponãotemintassumidoimplicitamente.Amacropadrão

MicrosoftVisualC++,noentanto,implementaopadrãoC89easpartesdoC99quesãonecessáriospara

compatibilidadecomC++11. [17]

C11

Em2007,iniciou­seumanovarevisãodopadrãoC,informalmentedenominada"C1X",atéasuapublicação

oficialem2011­12­08.OComitêdePadrõesCadotoudiretrizesparalimitaraadoçãodenovosrecursosque

nãoforamtestadospelasimplementaçõesexistentes.

OpadrãoC11adicionaváriosnovosrecursosaoCeàbiblioteca,incluindomacrosgenéricosdetipo,estruturas

anônimas,suporteUnicodeaprimorado,operaçõesatômicas,multi­threadingefunçõesdeverificaçãode

limites.TambémtornaalgumaspartesdabibliotecaC99existenteopcionaisemelhoraacompatibilidadecom

C++.Amacropadrão

STDC_VERSION

édefinidocomo201112LparaindicarqueoapoioC11estádisponível.

EmbutidoC

Historicamente,aprogramaçãoCembutidarequerextensõesnãopadronizadasparaalinguagemC,afimde

suportarrecursosexóticoscomoaritméticadepontofixo,váriosbancosdememóriadistintoseoperações

básicasdeE/S.

Em2008,oComitêdePadrõesCpublicouumrelatóriotécnicoestenderalinguagemC [18] pararesolveresses problemas,fornecendoumpadrãocomumparatodasasimplementaçõesdeaderir.Eleincluiumasériede recursosnãodisponíveisemCnormais,taiscomoaritméticadepontofixo,espaçosdeendereçocomnome,e eubásica/Ohardwaredeendereçamento.

Sintaxe

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

CtemumagramáticaformalespecificadopelanormaC. [19] Osfinsdelinhasãogeralmentenãosignificativa noC;Contudo,oslimitesdelinhatêmsignificadoduranteafasedepré­processamento.Comentáriospodem

aparecerentreosdelimitadores/*e*/,ou(desdeC99)seguinte//atéofimdalinha.Comentáriosdelimitada

por/*e*/nãoseaninham,eessassequênciasdecaracteresnãosãointerpretadoscomodelimitadoresde comentáriosseelesaparecemdentrodecordasoudecaracteresliterais. [20]

OsarquivosdeorigemCcontêmdeclaraçõesedefiniçõesdefunção.Asdefiniçõesdefunção,porsuavez,

contêmdeclaraçõeseafirmações.Declaraçõesquerdefinirnovostiposusandopalavras­chavecomostruct,

unioneenum,ouatribuirtiposdeetalvezdearmazenamentodereservaparanovasvariáveis,geralmentepor

escritodotiposeguidodonomedavariável.Palavras­chave,taiscomochareintespecificarostiposde

embutidos.Seçõesdecódigosãocolocadosentrechaves({e},àsvezeschamadode"chaves")paralimitaro

âmbitodasdeclaraçõeseagircomoumaúnicainstruçãoparaestruturasdecontrole.

Comoumalinguagemimperativa,Cusadeclaraçõesdeespecificarações.Aindicaçãomaiscomuméuma

indicaçãodaexpressão,queconsistedeumaexpressãoaseravaliada,seguidoporumpontoevírgula;como

umefeitocolateraldaavaliação,asfunçõespodemserchamadosevariáveispodemseratribuídosnovos

valores.Paramodificaraexecuçãosequencialnormaldeinstruções,Cforneceváriasinstruçõesdecontrole­

fluxoidentificadasporpalavras­chavereservadas.Programaçãoestruturadaéapoiadoporifelse)aexecução

condicionalepordo­while,whileeforexecuçãoiterativo(looping).Afordeclaraçãoteminicialização

separada,ensaios,easexpressõesdereinicialização,qualquerumoutodosdosquaispodemseromitidos.

breakecontinuepodeserusadoparadeixarainstruçãodeloopmaisinternooupularparaasuareinicialização.

Hátambémumnão­estruturadagotodeclaraçãoqueseramificadiretamenteparaadesignadaetiquetadentroda

função.switchseleccionaumcaseparaserexecutadocombasenovalordeumaexpressãointeira.

Asexpressõespodemusarumavariedadedeoperadoresinternosepodemconterchamadasdefunção.Aordem

naqualosargumentosparafunçõeseoperandosparaamaioriadosoperadoressãoavaliadosnãoé

especificada.Asavaliaçõespodemmesmoserintercaladas.Noentanto,todososefeitossecundários(incluindo

oarmazenamentodevariáveis)ocorreráantesdopróximo"pontodesequência";Ospontosdeseqüência

incluemofinaldecadadeclaraçãodeexpressãoeaentradaeretornodecadachamadadefunção.Pontosde

seqüênciatambémocorrerduranteaavaliaçãodeexpressõesquecontêmdeterminadosoperadores(&&,||,?:e

ooperadorvírgula).Issopermiteumaltograudeotimizaçãodecódigoobjetopelocompilador,masrequer

programadoresCparatermaiscuidadoparaobterresultadosconfiáveisdoqueénecessárioparaoutras

linguagensdeprogramação.

KernighaneRitchiediznaintroduçãodeALinguagemdeProgramaçãoC:"C,comoqualqueroutralíngua, temsuasmanchasAlgunsdosoperadorestemaprecedênciaerrado,algumaspartesdasintaxepoderiaser melhor.". [21] OpadrãoCnãotentoucorrigirmuitasdestasmanchas,devidoaoimpactodetaisalteraçõesnas softwarejáexistente.

Conjuntodecaracteres

OconjuntodecaracteresdeorigemCbásicoincluiosseguintescaracteres:

LetrasmaiúsculaseminúsculasdeISOBásicoalfabetolatino:a­zA­Z

Dígitosdecimais:0 ­ 9 0­9

Personagensgráficos:! " # % & ' ( ) * + , ‐ ! " # % & ' ( ) * + , ‐

.

/

:

;

< =

>

?

[

\

]

^

_

{

|

} ~

Newlineindicaofinaldeumalinhadetexto;Elenãoprecisacorresponderaumúnicocaráterreal,emborapor

conveniênciaCtrata­locomoum.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Caracterescodificadosadicionaismulti­bytepodeserusadoemstringsliterais,maselesnãosãototalmente

portátil.OmaisrecentepadrãoC(C11)permitemulti­nacionaisUnicodecaracteresparaserincorporado

portablynotextofonteCusando\uXXXXou\UXXXXXXXXcodificação(ondeoXdenotaumcaracterehexadecimal),

emboraesserecursoaindanãofoiamplamenteimplementado.

OconjuntobásicoCcaráterdeexecuçãocontémosmesmoscaracteres,juntamentecomrepresentaçõesde

alerta,deretrocesso,eretornodecarro.Run­timesuporteparaconjuntosdecaracteresestendidostem

aumentadoacadarevisãodopadrãoC.

Aspalavrasreservadas

C89tem32palavrasreservadas,tambémconhecidascomopalavras­chave,quesãoaspalavrasquenãopodem

serusadasparaoutrospropósitosquenãoaquelesparaosquaiselesestãopré­definidos:

auto

int

break

else

case

register

typedef

char

return

union

const

unsigned

continue

for

signed

default

do

if

C99reservoumaiscincopalavras:

 

_Bool

_Imaginary

_Complex

C11reservadosmaissetepalavras: [22]

 

_Alignas

_Atomic

_Noreturn

_Thread_local

_Alignof

_Generic

_Static_assert

Amaioriadaspalavrasrecentementereservadascomeçamcomumsublinhadoseguidoporumaletra maiúscula,porqueidentificadoresdesseformulárioforampreviamentereservadospelopadrãoCparauso somenteporimplementações.Comoocódigofontedoprogramaexistentenãodeveriaterusadoesses identificadores,elenãoseriaafetadoquandoasimplementaçõesCcomeçassemasuportaressasextensõespara alinguagemdeprogramação.Algunscabeçalhospadrãodefinemsinônimosmaisconvenientespara identificadoressublinhados.Alinguagemanteriormenteincluídoumapalavrareservadachamadaentry,mas issoraramentefoiimplementado,eagorafoiremovidocomoumapalavrareservada. [23]

Operadores

Csuportaumricoconjuntodeoperadores,quesãosímbolosusadosdentrodeumaexpressãoparaespecificar

asmanipulaçõesaserexecutadaaoavaliaressaexpressão.Ctemoperadorespara:

atribuiçãoampliada:+=,‐=,*=,/=,%=,&=,|=,^=,<<=,>>=

lógicabitabit : ~ , & , | , ^ lógicabitabit:~,&,|,^

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

lógicabooleana : ! , && , || lógicabooleana:!,&&,||

testedeigualdade:== , != ==,!=

Sequenciamento:, agrupamentosub­expressão : ( ) conversãodetipo : ( typename ) , agrupamentosub­expressão:( ) conversãodetipo:(typename)

Cusaooperador=(usadaemmatemáticaparaexpressaraigualdade)paraindicaraatribuição,seguindoo precedentedoFortranePL/I,masaocontráriodeALGOLeseusderivados.Cusaooperador==paratestara igualdade.Asemelhançaentreestesdoisoperadores(atribuiçãoeigualdade)poderesultarnousoacidentalde umnolugardooutro,eemmuitoscasos,oerronãoproduzumamensagemdeerro(emboraalguns

compiladoresproduzamavisos).Porexemplo,aexpressãocondicionalif(a==b+1)podesererroneamente

escritoscomoif(a=b+1),oqueseráavaliadocomoverdadeiroseafordiferentedezeroapósaatribuição. [24]

OCprecedênciadooperadornemsempreéintuitiva.Porexemplo,ooperador==ligamaisfortementedoque (éexecutadoantes)osoperadores&(bitabitE)e|(bitabitOR)emexpressões,taiscomox & 1 == 0,oque deveserescritocomo(x & 1) == 0seessaéaintençãodoprogramador. [25]

"Olá,mundo"exemplo

O"Olá,mundo"exemplo,queapareceunaprimeiraediçãodoK&R,tornou­seomodeloparaumprograma

deintroduçãonamaioriadoslivrosdeprogramação,independentementedalinguagemdeprogramação.O

programaimprime"Olá,mundo"paraasaídapadrão,quenormalmenteéumateladoterminalounatela.

Aversãooriginalfoi: [26]

principal ()

{

printf ( "Olá, mundo \ n " );

}

Umpadrão­conforme"Olá,mundo"programaé: [a]

#include <stdio.h>

int

{

principal ( vazio )

printf ( "Olá, mundo \ n " );

}

Aprimeiralinhadoprogramacontémumadirectivadepré­processamento,indicadopor#include.Issofaz

comqueocompiladorparasubstituiressalinhacomtodootextodostdio.hcabeçalhopadrão,quecontém

declaraçõesparapadrãofunçõesdeentradaesaída,taiscomoprintf.Oscolchetesemtornostdio.hindicam

questdio.hestálocalizadousandoumaestratégiadepesquisaquepreferecabeçalhosfornecidoscomo

compiladorparaoutroscabeçalhoscomomesmonome,aoinvésdeaspasduplasquetipicamenteincluem

arquivosdecabeçalholocaisouespecíficasdoprojeto.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Apróximalinhaindicaqueumafunçãochamadamainestásendodefinido.Amainfunçãoserveaumpropósito especialemprogramasemC;oambientedetempodeexecuçãochamaamainfunçãoparacomeçaraexecução doprograma.Otipoespecificadorintindicaqueovalorqueéretornadaparaochamador(nestecaso,o ambientedetempodeexecução)comoumresultadodaavaliaçãodamainfunção,éumnúmerointeiro.A palavra­chavevoidcomoumalistadeparâmetrosindicaqueestafunçãonãotemargumentos. [B]

Achavedeaberturaindicaoiníciodadefiniçãodamainfunção.

Apróximalinhachama(desviaaexecuçãopara)umafunçãochamadaprintf,quenestecasoéfornecidoa partirdeumsistemadebiblioteca.Nestachamada,aprintffunçãoépassada(fornecido)comumúnico argumento,oendereçodoprimeirocaracterenastringliteral"hello, world\n".Astringliteraléumsemnome

matrizcomelementosdotipochar,criadoautomaticamentepelocompiladorcomumcaracterefinal0­

valorizadoparamarcarofimdoarray(printfprecisasaberdisso).A\néumasequênciadeescapequeCse

traduzemumanovalinhadecaracteres,quenasaídasignificaofimdalinhaatual.Ovalorderetornoda

printffunçãoédotipoint,masédescartadosilenciosamente,umavezquenãoéusado.(Umprogramamais

cuidadosopodetestarovalorderetornoparadeterminarseounãoaprintffunçãocomêxito.)Opontoe

vírgula;terminaocomunicado.

Achavedefechamentoindicaofimdocódigoparaamainfunção.DeacordocomaespecificaçãodoC99e

maisrecente,amainfunção,aocontráriodequalqueroutrafunção,voltaráimplicitamenteumvalorde0ao

atingira}queterminaafunção.Issoéinterpretadopelosistemadetempodeexecuçãocomoumcódigode saídaindicandoexecuçãobem­sucedida. [27]

Ostiposdedados

OtipodesistemaemCéestáticaefracamentetipado,oqueotornasemelhanteaosistematipodeALGOL descendentes,comoPascal. [28] Hábuilt­intiposdeinteirosdeváriostamanhos,ambosassinadose,sem assinaturanúmerosdepontoflutuanteetiposenumerados(enum).Tipointeirocharémuitasvezesusadopara

caracteresdebyteúnico.C99acrescentouumtipodedadosbooleano.Hátambémostiposderivados,

incluindomatrizes,ponteiros,registros(struct),enãomarcadossindicatos(union).

Céfreqüentementeusadoemprogramaçãodesistemasdebaixonívelondeescapesdosistemadetipopodem

sernecessários.Ocompiladortentaassegurartipodecorreçãodamaioriadasexpressões,masoprogramador

podesubstituirasverificaçõesdeváriasmaneiras,usandoumtipocastparaconverterexplicitamenteumvalor

deumtipoparaoutro,ouusandoponteirosousindicatosparareinterpretarosbitssubjacentesDeumobjetode

dadosdealgumaoutramaneira.

AlgunsachamsintaxededeclaraçãodeCintuitiva,particularmenteparaponteirosdefunção.(Aidéiade

Ritchiefoideclararidentificadoresemcontextosqueassemelha­seasuautilização:"declaraçãorefleteouso

.") [29]

DoCconversõesaritméticasusuaispermitircódigoeficienteasergerado,masàsvezespodeproduzir

resultadosinesperados.Porexemplo,umacomparaçãodeinteirosassinadosenãoassinadosdelarguraigual

requerumaconversãodovalorassinadoparaunsigned.Issopodegerarresultadosinesperadosseovalor

assinadofornegativo.

Ponteiros

Csuportaousodeponteiros,umtipodereferênciaqueregistraoendereçooulocalizaçãodeumobjetoou

funçãonamemória.Osponteirospodemserdereferencedparaacessardadosarmazenadosnoendereço

apontado,ouparainvocarumapontadoparafuncionar.Ponteirospodemsermanipuladosusandocessãoou

aritméticadeponteiro.Arepresentaçãoemtempodeexecuçãodeumvalordeponteiroénormalmenteum

endereçodememóriabruta(talvezaumentadoporumcampodedeslocamentodentrodeumapalavra),mas

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

comootipodeumponteiroincluiotipodacoisaapontada,asexpressõesincluindoponteirospodemser

verificadasportipoEmtempodecompilação.Aaritméticadoponteiroéautomaticamentedimensionadapelo

érealizadautilizandoponteiros.Muitostiposdedados,taiscomoárvores,sãocomumenteimplementado

comoalocadosdinamicamentestructobjetosvinculadosemconjunto,utilizandoponteiros.Ponteirospara

funçõessãoúteisparapassarfunçõescomoargumentosparafunçõesdeordemsuperior(taiscomoqsortou bsearch)oucomochamadasderetornoaserinvocadaspelosmanipuladoresdeeventos. [27]

Umponteironulovalorapontaexplicitamenteanenhumlocalválido.Dereferencingumvalordeponteironulo

éindefinido,muitasvezesresultandoemumafalhadesegmentação.Valoresponteironulosãoúteispara

indicarcasosespeciais,comono"próximo"ponteirononófinaldeumalistaligada,oucomoumaindicação

deerrodefunçõesretornarponteiros.Emcontextosapropriadosnocódigo­fonte,comoparaatribuirauma

variávelponteiro,umaconstanteponteironulopodeserescritocomo0,comousemconversãoexplícitapara

umtipodeponteiro,oucomoaNULLmacrodefinidaporvárioscabeçalhospadrão.Emcontextoscondicionais,

osvaloresdeponteironulosãoavaliadoscomofalsos,enquantotodososoutrosvaloresdeponteirosão

avaliadoscomoverdadeiros.

Ponteirosvoid(void *)apontamparaobjetosdotiponãoespecificado,epode,portanto,serusadocomo

ponteirosdedados"genéricos".Comootamanhoeotipodoobjetoapontadonãosãoconhecidos,osponteiros

vaziosnãopodemserdesreferenciados,nemaaritméticadeponteirosnelesépermitida,emborapossamser

facilmenteconvertidas(eemmuitoscontextos)paraedequalqueroutroponteirodeobjetodigitar. [27]

Ousodescuidadodeponteirosépotencialmenteperigoso.Comoelesnormalmentesãodesmarcados,uma

variáveldeponteiropodeserfeitaparaapontarparaqualquerlocalarbitrário,oquepodecausarefeitos

indesejáveis.Emboraponteirosadequadamenteutilizadosapontamparalugaresseguros,elespodemserfeitos

paraapontarparalocaisinsegurosusandoinválidoponteiroaritmética;osobjetosqueapontamparapodem

continuaraserutilizadosapósadesalocação(ponteirospendurados);quepodeserusadosemtersido

inicializado(ponteirossilvestres);Ouelespodemserdiretamenteatribuídoumvalorinsegurousandoum

elenco,uniãoouatravésdeoutroponteirocorrompido.Emgeral,Cépermissivoparapermitiramanipulaçãoe

conversãoentretiposdeponteiro,emboraoscompiladorestipicamentefornecemopçõesparaváriosníveisde

verificação.Algumasoutraslinguagensdeprogramaçãoresolverestesproblemasatravésdautilizaçãomais

restritivasdereferênciatipos.

Arrays

MatriztiposemCsão,tradicionalmente,deumtamanhofixo,estáticoespecificadoemtempodecompilação.

(ArecentenormamaisC99permitetambémumaformadematrizesdecomprimentovariável.)Noentanto,

tambémépossívelalocarumblocodememória(detamanhoarbitrário)emtempodeexecução,usandoa

bibliotecapadrãomallocfunção,etratá­locomoumMatriz.Cunificaçãodematrizeseponteirossignificaque

arraysdeclaradoseestesalocadosdinamicamentearrayssimuladossãopraticamenteintercambiáveis.

Desdematrizessãosempreacedidos(emvigor)atravésdeponteiros,acessosdematrizsãotipicamentenão verificadaemrelaçãoaotamanhodamatrizsubjacente,emboraalgunscompiladorespodefornecerverificação delimitescomoumaopção. [30] delimitesdematrizviolaçõessão,portanto,possívelebastantecomumem códigodescuidadamenteescrita,epodelevaraváriasrepercussões,incluindomemóriailegalacessos,

corrupçãodedados,estourosdebuffer,etempodeexecuçãoexceções.Seaverificaçãodelimitesfor

desejada,eladeveserfeitamanualmente.

Cnãotemumadisposiçãoespecialparadeclarararraysmulti­dimensionais,massimdependederecursão

dentrodosistemadetipoparadeclarararraysdearrays,querealizaefetivamenteamesmacoisa.Osvaloresdo

Índicede"matrizmulti­dimensional"resultantepodeserpensadocomooaumentonaordemdelinhaprincipal

.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Matrizesmulti­dimensionaissãocomumenteutilizadosemalgoritmosnuméricos(principalmentedaApplied

álgebralinear)paraarmazenarasmatrizes.AestruturadoarrayCébemadequadaparaestatarefaespecífica.

Noentanto,umavezqueasmatrizessãopassadasapenascomoponteiros,oslimitesdamatrizdevemser

conhecidosvaloresfixosouentãoexplicitamentepassadosparaqualquersub­rotinaqueosnecessite,ematrizes

dematrizesdinamicamentedimensionadasnãopodemseracessadasusandoduplaindexação.(Umasolução

paraissoéalocaramatrizcomum"vetordelinha"adicionaldeponteirosparaascolunas.)

C99introduzidos"matrizesdecomprimentovariável"queabordamalguns,masnãotodososproblemascom

ordináriasarraysC.

Matrizponteiropermutabilidade

Anotaçãosubscritax[i](ondexdesignaumponteiro)éumaçúcarsintáticopara*(x+i). [31] Aproveitandoo conhecimentodocompiladordotipodeponteiro,oendereçoquex + iapontaparanãoéoendereçodebase (apontadaporx)incrementadoemibytes,massimestádefinidaparaseroendereçodebaseincrementadopor

imultiplicadapelotamanhodeumelementoquexapontapara.Destemodo,x[i]designaoi+1ésimoelemento

damatriz.

Alémdisso,namaioriadoscontextosdeexpressão(aexceçãonotávelécomooperandodesizeof),onomede

umamatrizéautomaticamenteconvertidoparaumponteiroparaoprimeiroelementodamatriz.Issoimplica

queumarraynuncaécopiadocomoumtodoquandonomeadocomoumargumentoparaumafunção,mas

apenasoendereçodoseuprimeiroelementoépassado.Portanto,apesardechamadasdefunçãoemusoC

passarporvalorsemântica,asmatrizesestãoemvigorpassadosporreferência.

Otamanhodeumelementopodeserdeterminadaaplicandoooperadorsizeofaqualquerelementodenão referenciadox,comoemn = sizeof *xoun = sizeof x[0],eonúmerodeelementosemumamatrizdeclarada Apodeserdeterminadacomosizeof A / sizeof A[0].Esteúltimosóseaplicaaosnomesdematriz:as variáveisdeclaradascomsubscritos(int A[20]).DevidoàsemânticadeC,nãoépossíveldeterminaro tamanhointeirodematrizesatravésdeponteirosparaarraysouaquelescriadosporalocaçãodinâmica( malloc);decódigo,taiscomosizeof arr / sizeof arr[0](emquearrdesignaumponteiro)nãoiráfuncionar desdequeocompiladorassumeotamanhodoponteiroemsiestáasersolicitada. [32][33] Desdeargumentosde nomedematrizparasizeofnãosãoconvertidosparaponteiros,elesnãoapresentamessaambiguidade.No entanto,matrizescriadaspelaalocaçãodinâmicasãoacessadosporponteirosemvezdevariáveisdematriz verdadeiras,entãoelessofremdosmesmossizeofproblemascomoponteirosdematriz.

Assim,apesardestaaparenteequivalênciaentrematrizeponteirovariáveis,aindaháumadistinçãoaserfeita

entreeles.Mesmoqueonomedeumamatrizé,namaioriadoscontextosdeexpressão,convertidoemum

ponteiro(paraseuprimeiroelemento),esteponteironãoocupanenhumarmazenamento;onomedamatriznão

éuml­valor,eseuendereçoéumaconstante,aocontráriodeumavariávelponteiro.Conseqüentemente,oque

umamatriz"apontapara"nãopodeseralterada,eéimpossívelatribuirumnovoendereçoaumnomede

matriz.Conteúdodamatrizpodesercopiado,noentanto,usandoamemcpyfunção,ouacessandooselementos

individuais.

Gerenciamentodememória

Umadasfunçõesmaisimportantesdeumalinguagemdeprogramaçãoéproporcionarfacilidadesparao gerenciamentodememóriaeosobjetosqueestãoarmazenadosnamemória.Cfornecetrêsmaneirasdistintas paraalocarmemóriaparaobjetos: [27]

Alocaçãodememóriaestática:oespaçoparaoobjetoéfornecidonobinárioemtempodecompilação;

estesobjectostêmumaextensão(outempodevida),enquantoobinárioquecontémdelesécarregadona

memória.

Alocaçãodememóriaautomática:objetostemporáriospodemserarmazenadosnapilha,eesseespaçoé

automaticamenteliberadoereutilizávelapósoblocoemqueelassãodeclaradaséencerrado.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Alocaçãodinâmicadememória:blocosdememóriadetamanhoarbitráriopodesersolicitadoemtempo

deexecuçãousandofunçõesdebiblioteca,taiscomomallocapartirdeumaregiãodememóriachamado

depilha;estesblocospersistiratéqueposteriormenteliberadoparareutilizaçãochamandoafunçãode

bibliotecareallocoufree

Estastrêsabordagenssãoapropriadasemsituaçõesdiferentesetêmváriascompensações.Porexemplo,a

alocaçãodememóriaestáticatempoucasobrecargadealocação,aalocaçãoautomáticapodeenvolverum

poucomaisdesobrecarga,ealocaçãodememóriadinâmicapodepotencialmenteterumagrandequantidadede

sobrecargaparaalocaçãoedesalocação.Anaturezapersistentedeobjetosestáticoséútilparamanter

informaçõesdeestadoatravésdechamadasdefunção,aalocaçãoautomáticaéfácildeusar,masoespaçode

pilhaétipicamentemuitomaislimitadoetransitóriodoqueamemóriaestáticaouoespaçodepilhaea

alocaçãodememóriadinâmicapermiteaalocaçãoconvenientedeobjetoscujosTamanhoéconhecidosomente

emtempodeexecução.AmaioriadosprogramasdeCfazusoextensivodetodosostrês.

Semprequepossível,aalocaçãoautomáticaouestáticaégeralmentemaissimplesporqueoarmazenamentoé gerenciadopelocompilador,liberandooprogramadordatarefapotencialmentepropensaaerrosdealocare liberarmanualmenteoarmazenamento.Noentanto,muitasestruturasdedadospodemmudardetamanhoem

tempodeexecuçãoe,umavezquealocaçõesestáticas(ealocaçõesautomáticasantesdeC99)devemterum

tamanhofixoemtempodecompilação,existemmuitassituaçõesemqueaalocaçãodinâmicaénecessária. [27]

AntesdopadrãoC99,matrizesdetamanhovariávelforamumexemplocomumdeste.(Vejaoartigosobre

mallocumexemplodematrizesalocadasdinamicamente.)Aocontráriodealocaçãoautomática,quepodefalhar

emtempodeexecuçãocomconsequênciasdescontroladas,asfunçõesdealocaçãodinâmicaretornaruma

indicação(naformadeumvalordeponteironulo),quandooarmazenamentonecessárionãopodeSer

alocados.(Alocaçãoestáticaqueémuitograndeénormalmentedetectadapelovinculadoroucarregador,antes

deoprogramapodeatémesmocomeçaraexecução.)

Salvoespecificaçãoemcontrário,osobjectosestáticoscontêmvaloresdeponteirozeroounulonoarranquedo

programa.Objetosalocadosautomaticamenteedinamicamentesãoinicializadossomenteseumvalorinicial

forexplicitamenteespecificado;casocontrário,elesinicialmentetervaloresindeterminados(tipicamente,

qualquerquesejaopadrãodobitpassaaestarpresentenaarmazenamento,quepodeaténãorepresentamum

valorválidoparaotipo).Seoprogramatentaacessarumvalornãoinicializado,osresultadossãoindefinidos.

Outraquestãoéqueaalocaçãodememóriadoheaptemdesersincronizadacomoseuusorealemqualquer

programaparaqueelepossaserreutilizadotantoquantopossível.Porexemplo,seoúnicoponteiroparauma

alocaçãodememóriaheapsaidoescopooutenhaoseuvalorsubstituídoantesfree()échamado,emseguida,

queamemórianãopodeserrecuperadoparareutilizaçãoposterioreé,essencialmente,perdeuparao

programa,umfenômenoconhecidocomoumafugadememória.Poroutrolado,épossívelqueamemóriaseja

liberada,mascontinueaserreferenciada,levandoaresultadosimprevisíveis.Normalmente,ossintomas

aparecerãoemumapartedoprogramamuitodistantedoerroreal,tornandodifícilrastrearoproblema.(Tais

questõessãomelhoradasdelínguascomacoletadelixoautomática.)

Bibliotecas

AlinguagemdeprogramaçãoCutilizabibliotecascomoseuprincipalmétododeextensão.EmC,uma bibliotecaéumconjuntodefunçõescontidasemumúnicoarquivo"archive".Cadabibliotecatem,tipicamente, umficheirodecabeçalho,oqualcontémosprotótiposdasfunçõescontidasdentrodabibliotecaquepodeser utilizadoporumprograma,edeclaraçõesdetiposdedadosespeciaisemacrosímbolosutilizadoscomestas funções.Paraqueumprogramaparausarumabiblioteca,eledeveincluiroarquivodecabeçalhodabiblioteca, eabibliotecadeveservinculadocomoprograma,queemmuitoscasosrequersinalizadoresdecompilador(por exemplo,‐lm,abreviaçãode"ligaçãodabibliotecadematemática"). [27]

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

AbibliotecamaiscomumCéabibliotecapadrãoC,queéespecificadopeloISOeANSICnormasevemcom

todasasimplementaçõesC(implementaçõesquevisamambienteslimitados,taiscomosistemasembarcados

podemfornecerapenasumsubconjuntodabibliotecapadrão).Estabibliotecaoferecesuporteaentradaesaída

defluxo,alocaçãodememória,matemática,seqüênciasdecaracteresevaloresdetempo.Várioscabeçalhos

padrãoseparadas(porexemplo,stdio.h)especificaasinterfacesparaessaseoutrasinstalaçõesdabiblioteca

padrão.

OutroconjuntocomumdefunçõesdebibliotecaCsãoaquelesusadosporaplicativosvoltadosespecificamente

paraUnixeUnix­likesistemas,especialmentefunçõesqueproporcionamumainterfaceparaonúcleo.Estas

funçõessãodetalhadasemváriospadrõescomoPOSIXeoSingleUNIXSpecification.

Ferramentasdelinguagem

VáriasferramentasforamdesenvolvidasparaajudarosprogramadoresCaencontrarecorrigirdeclaraçõescom

comportamentoindefinidooupossivelmenteexpressõeserrôneas,commaiorrigordoqueofornecidopelo

compilador.Aferramentalintfoioprimeiro,levandoamuitosoutros.

Automatizadoverificaçãodecódigo­fonteeauditoriasãobenéficosemqualqueridioma,eporCexistem muitasdessasferramentas,taiscomoLint.UmapráticacomuméusarLintparadetectarcódigoquestionável quandoumprogramaéescritopelaprimeiravez.UmavezqueumprogramapassaLint,eleécompilado usandoocompiladorC.Alémdisso,muitoscompiladorespodemopcionalmenteavisarsobresintaticamente construçõesválidasquesãosusceptíveisderealmentesererros.MISRACéumconjuntoproprietáriode diretrizesparaevitartalcódigoquestionável,desenvolvidoparasistemasembarcados. [34]

Hátambémcompiladores,bibliotecasemecanismosdeníveldesistemaoperacionalparaexecutaraçõesque

nãosãoumapartepadrãodeC,comoaverificaçãodelimitesparaarrays,adetecçãodeestourodebuffer,

Usos

Céamplamenteutilizadopara"programaçãodosistema",incluindoaimplementaçãodesistemas operacionaisesistemasembarcadosaplicações,porqueocódigoC,quandoescritosparaaportabilidade,pode serusadonamaioriadoscasos,noentanto,quandonecessário,ocódigoespecíficodosistemapodeserusado paraacessarhardwareespecíficoendereçoseexecutartipotrocadilhosparacorresponderaosrequisitosde interfaceimpostasexternamente,comumabaixadetempodeexecuçãodemandaderecursosdosistema.C tambémpodeserusadoparaaprogramaçãodesiteusandoCGIcomouma"portadeentrada"parainformações entreoaplicativodaWeb,oservidoreobrowser. [36] Cémuitasvezesescolhidoemdetrimentodelinguagens interpretadasporcausadesuavelocidade,estabilidadeedisponibilidadequaseuniversal. [37]

UmaconsequênciadaampladisponibilidadeeeficiênciadeCéquecompiladores,bibliotecaseintérpretesde outraslinguagensdeprogramaçãosãomuitasvezesimplementadoemC.Asimplementaçõesprimáriasde Python,Perl 5ePHP,porexemplo,sãotodosescritosemC.

Comoacamadadeabstraçãoéfinaeasobrecargaébaixa,Cpermitequeosprogramadorescriem

implementaçõeseficientesdealgoritmoseestruturasdedados,úteisparaprogramascomputacionalmente

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

completamenteouparcialmenteescrito

emC.

Céporvezesutilizadocomouma

implementaçõesdeoutraslínguas.Esta

abordagempodeserutilizadaparaa

portabilidadeouconveniência;Usando

Ccomoumalinguagemintermediária,

nãosãonecessáriosgeradoresdecódigo

adicionaisespecíficosdamáquina.C

temalgunsrecursos,comoasdiretivas

depré­processadordenúmerodelinhae

asvírgulassupérfluasopcionaisnofinal

daslistasdeinicialização,quesuportam

acompilaçãodocódigogerado.No

entanto,algumasdeficiênciasdeCter

solicitadoodesenvolvimentodeoutras

linguagensbaseadasemCconcebidos

especificamenteparautilizaçãocomo

línguasintermediárias,taiscomoC­­.

O índicetiobe gráficode2002­2015,quemostraumacomparaçãoda popularidadedeváriaslinguagensdeprogramação [ 3 5 ]

Oíndicetiobegráficode2002­2015,quemostraumacomparaçãoda

popularidadedeváriaslinguagensdeprogramação [35]

Ctambémtemsidoamplamenteusadoparaimplementardeusuáriofinalaplicações.Noentanto,esses

aplicativostambémpodemserescritosemlinguagensmaisrecentesedenívelsuperior.

Idiomasrelacionados

Ctemtantodirectacomoindirectamenteinfluenciadasmuitaslínguasposteriores,comoC#,D,Go,Java,

JavaScript,Limbo,LPC,Perl,PHP,Python,edeUnixshellC.Ainfluênciamaisdifundidatemsido

sintática:todasaslínguasmencionadascombinaradeclaraçãoe(maisoumenosreconhecível)expressão

sintaxedoCcomsistemasdotipo,modelosdedadose/ouestruturasdeprogramasemgrandeescalaque

diferemdosdeC,àsvezesradicalmente.

ExistemváriosintérpretesCouquase­C,incluindoCheCINT,quetambémpodeserusadoparascripting.

Quandolinguagensorientadasaobjetotornou­sepopular,C++eObjective­Cforamduasextensõesdiferentes

deCqueforneceuascapacidadesorientadasaobjetos.Ambasaslínguasforamoriginalmenteimplementado

comocompiladoresfonte­a­fonte;CódigofontefoiconvertidoemCe,emseguida,compiladocomum

compiladorC.

OC++linguagemdeprogramaçãofoiconcebidoporBjarneStroustrupcomoumaabordagemparafornecer orientadaaobjetosfuncionalidadecomumasintaxeC­like. [38] C++acrescentamaisforçadigitação,escopo,e outrasferramentasúteisnaprogramaçãoorientadaaobjetos,epermiteaprogramaçãogenéricaatravésde modelos.QuaseumsuperconjuntodeC,C++agorasuportaamaiorparteC,comalgumasexceções.

Objective­Cfoioriginalmenteummuito"fina"camadaemcimadeC,econtinuaaserumsuperrigorosadoC

quepermiteaprogramaçãoorientadaaobjetosusandoumparadigmahíbridoedinâmico/estáticodedigitação.

Objective­CderivasuasintaxedoCeSmalltalk:sintaxequeenvolveopré­processamento,expressões,

declaraçõesdefunçãoechamadasdefunçãoéherdadodeC,enquantoasintaxepararecursosorientadosa

objetosprovémoriginalmentedoSmalltalk.

AlémdeC++eObjective­C,Ch,cilkeUnifiedParallelCsãoquasesupersetsdeC.

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Vejatambém

Notas

a.Ocódigodeexemplooriginalirácompilarnamaioriadoscompiladoresmodernosquenãoestãoemestrita

conformidadecomopadrãomodo,masnãototalmenteemconformidadecomosrequisitosdeambososC89ouC99.

Defato,C99requerqueumamensagemdediagnósticosejaproduzida.

b.Amainfunçãotemdoisargumentos,int argcechar *argv[],respectivamente,oquepodeserusadoparalidar

comargumentosdelinhadecomando.OpadrãoISOC(secção5.1.2.2.1)exigequeambasasformasdemainaapoiar,

queéotratamentoespecialnãoconcedidoaqualqueroutrafunção.

Referências

2.Ritchie(1993):"Thompsontinhafeitoumabrevetentativadeproduzirumsistemacodificadoemumaversãoinicial

doC­antes­estruturas­em1972,masdeu­seoesforço."

3.Ritchie(1993):"OesquemadecomposiçãodotipoadotadapelaCdevedívidaconsiderávelparaAlgol68,embora

issonãoaconteceu,talvez,emergiremumaformaqueosaderentesdeAlgolaprovaria."

4."VerilogHDL(eC)"(PDF).AEscoladePesquisadeCiênciadaComputaçãodaUniversidadeNacionaldaAustrália.

2010­06­03.Retirado2013/08/19."Décadade1980:;Verilogintroduzidopelaprimeiravez;Veriloginspiradona

linguagemdeprogramaçãoC"

5.Ritchie(1993)

7."LinguagemdeProgramaçãodepopularidade".2009.Retirado16dedeJaneirode2009.

8."IndexComunidadeTIOBEProgramming".2009.Obtido6deMaiode2009.

9.Ritchie,DennisM.(Marçode1993)."ODesenvolvimentodaLinguagemC".AvisosACMSIGPLAN.28(3):201­

10.UlfBilting&JanSkansholm"VägenatéC"(sueco)quesignifica"TheRoadtoC",terceiraedição,Studentlitteratur,

2000,página3.ISBN91­44­01468­6.

(6):2021­2048.doi:10.1002/j.1538­7305.1978.tb02141.x.Retirado16dedeDezembrode2012.(Nota:esta

referênciaéumadigitalizaçãoOCRdooriginalecontémumarepresentaçãodefalhadeOCR"IBM370"como"IBM

310".)

(Relatóriotécnico).CSTR.BellLabs.P.10.139.

13.Stallings,William."SistemasOperacionais:InternosePrincípiosdeDesign",5ªedição,página91.Pearson

Education,Inc.2005.

15.Stroustrup,Bjarne(2002).Arivalidadeentreirmãos:CeC++(PDF)(Relatório).AT&TLabs.

16."JTC1/SC22/WG14­C".Homepage.ISO/IEC.Retirado2deJunhode2011.

17.AndrewBinstock(12deoutubrode2011)."EntrevistacomHerbSutter".Dr.Dobbs.Retirado7deSetembrode,

2013.

18."18037TR:EmbutidoC"(PDF).ISO/IEC.Retirado26dedeJulhode2011.

20.Kernighan,BrianW.;Ritchie,DennisM.(1996).ALinguagemdeProgramaçãoC(2ªed.).PrenticeHall.P.192.

ISBN 730202412X. 21.Page3doKoriginal&R [1]

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

23.Kernighan,BrianW.;Ritchie,DennisM.(1996).ALinguagemdeProgramaçãoC(2ªed.).PrenticeHall.pp.192,

24."10erroscomunsdeprogramaçãoemC++".Cs.ucr.edu.Retirado26dedeJunhode2009.

25.Schultz,Thomas(2004).Cea8051(3ªed.).Otsego,MI:PageFreePublishingInc.p.20.ISBN 1­58961­237­X.

Retirado10deFevereirode2012.

26.Page6doKoriginal&R [1] 27.Klemens,Ben(2013).21stCenturyC.O'ReillyMedia.ISBN 1­4493­2714­1.

28.Feuer,AlanR.;Gehani,NarainH.(Março1982)."ComparaçãodaslinguagensdeprogramaçãoCePascal".ACM

Computing.14(1):73­92.doi:10,1145/356.869,356872.(subscriçãoexigida(ajuda)).

29.página122daK&R2 [14]

32.Summit,Steve."comp.lang.cPerguntasFrequentes6,23".Obtido6deMarçode,2013.

33.Summit,Steve."comp.lang.cPerguntasFrequentes7,28".Obtido6deMarçode,2013.

34."ManPáginadefiapos(SeçãoFreeBSD1)".unix.com.2001/05/24.Retirado2014/07/15.

35.McMillan,Robert(2013/08/01)."JavaestáperdendoseuMojo?".Comfios.

36.SourcebookdoDr.Dobb.EUA:MillerFreeman,Inc.Novembro­Dezembrode1995.

37."UsandoCparaprogramaçãoCGI".Linuxjournal.com.01demarçode2005.Retirado4deJaneirode2010.

38.Stroustrup,Bjarne(1993)."UmaHistóriadeC++:1979­1991"(PDF).Retirado9deJunhode2011.

Fontes

ProgrammingLanguagesConference(HOPL­II).Cambridge,MA,EUA­20­23abril,1993:ACM.Pp.

201­208.doi:10,1145/154.766,155580.ISBN 0­89791­570­4.Retirado2014/11/04.

Alémdissoleitura

Banahan,M.;Brady,D.;Doran,M.(1991).OCReserve(2ªed.).Addison­Wesley.

Ligaçõesexternas

publicamentedisponíveis,incluindooC99Fundamentação

15/01/2017

C(linguagemdeprogramação)­Wikipédia,aenciclopédialivre

Estapáginafoimodificadapelaúltimavezem15dejaneirode2017,às11:37.

Termosadicionaispodemseraplicados.Aoutilizarestesite,vocêconcordacomosTermosdeUsoe

PolíticadePrivacidade.WikipédiaéumamarcacomercialregistradadaWikimediaFoundation,Inc.,

umaorganizaçãosemfinslucrativos.