You are on page 1of 3

19/12/2014

EstructuradeunprogramaenC

ArquitecturadeSistemas

UniversidadCarlosIIIdeMadrid
GradoenIng.Telemtica/Sist.

Septiembre2011Enero2012

Audiovisuales/Sist.de
Comunicaciones

EstructuradeunprogramaenC
Enlaactualidadexistenmltipleslenguajesdeprogramacindenominadosdealtonivel,esdecir,aquellos
quepermitenescribirprogramasenunformatolejanoallenguajemquinaoensambladorqueeselqueutiliza
elprocesadorparaejecutartodoslosprogramas.Javaesunlenguajedealtonivelorientadoaobjetopueslos
programasseestructuranalrededordeclasesyobjetos.C,encambio,nodisponedeobjetosyseestructuraen
baseaunconjuntodefunciones,porloquesedenominaunlenguajeprocedimental.
Javaesunlenguajeconunafuncionalidadmuyextensa,yaunquecoincideconCenunporcentajeampliode
estafuncionalidadlasdiferenciasentreambossonmuchomayoresquelascoincidencias.Lasconstruccionesdel
lenguajeCsonmuchomssimplesquelasdeJava.Enmecanismostalescomobucles,condicionales,etc.,
amboslenguajescoinciden,peroenelrestodeaspectostalescomoladefinicindeestructurasdedatosC
ofrecemecanismosmssimples.
UnprogramaenCesunconjuntodefunciones,definicionesdetiposdedatosydeclaracionesdevariables
contenidosenunconjuntodeficheros.UnprogramaenCsiemprecomienzaaejecutarporlafuncincon
nombremain.Cualquierfuncinpuedellamaracualquierfuncin,ylasvariablesdeclaradasfueradelas
funcionestienenmbitoglobalolocalalficheroquelascontiene(sisedeclaranconelprefijostatic).La
siguientefigurailustralaestructuradeunprogramaenCcontenidoenvariosficheros.

Elcompiladoreselprogramaencargadodetraducirunconjuntodefunciones,definicionesydeclaracionesen
mltiplesficherosaunficheroejecutable.ElcompiladordeCtieneuncomportamientosorprendentemente
sencilloyrealizamuchomenostrabajodelqueseestacostumbradoconotroscompiladorescomoeldeJava.
Paracrearunejecutable,elcompiladorprocesalosficherosdecdigounoaunodeformaindependiente,de
formaquelasdefinicionesdevariablesyfuncionesdeunficheronolasrecuerdacuandoprocesaelfichero
siguiente.Adems,elcompiladorrealizaunanicapasadaporeltexto,porloquecuandosetraduceun
fichero,enunpuntoconcretodeltexto,slosedisponedelasdefinicionesquesehanencontradohastaese
punto.
Comoconsecuenciadeestecomportamiento,unavariablenopuedeserutilizada,anoserquesehaya
declaradopreviamenteenesemismofichero.Igualmente,unafuncinnopuedeserinvocadaanoserquese
hayaincluidopreviamenteenelmismofichero.Parapoderdividirigualmenteelcdigoenmltiplesficherosel
lenguajepermiteladefinicindeprototiposdefunciones(eltipodelresultadoquedevuelven,seguidodel
nombredelafuncinydeltipodesusparmetrosentreparntesis)sinincluirelcdigo,yademspermitela
definicindevariablescomoexternas,esdecir,queestnenotrofichero.Acontinuacinsemuestrandos
ficherosenlosquelafuncinfillInylavariabletableestndefinidasenunficheroperolasutilizala
funcinmainenelotrofichero.

Fichero1.c
1

#defineSIZE100

2
3
4

/*Tablade100enteros(Global)*/
inttable[SIZE]

5
6
7

/*Rellenaunatablaconceros*/
voidfill_in(int*t,intsize)
{

8
9

inti
for(i=0i<sizei++)

http://www.it.uc3m.es/abel/as/DSP/M1/CPrograms_es.html

Fichero2.c
1
2
3

defineSIZE100
#
/*Variableglobaldeclaradaenotrofichero*/
externinttable[SIZE]

4
5
6

/*Funcindeclaradaenotrofichero*/
voidfill_in(int*,int)

7
8
9

/*Puntodeentradadelprograma*/
intmain(intargc,char*argv[])
1/3

19/12/2014

EstructuradeunprogramaenC

10
11
12

{
t[i]=0
}

10
11
12

{
fill_in(table,SIZE)
return0

13
14

return
}

13

Lalnea3enFichero2.cnotificaalcompiladorqueexisteunatablade100enterosconnombretable
definidaenotrofichero.Lalnea6esunprototipodefuncin.Contieneeltipodelresultado(void)seguidodel
nombredelafuncin(fill_in)ydelosnombresytiposdelosparmetrosentreparntesis(int*t,int

size).Estalneainformaalcompiladorqueunafuncindeestascaractersticasestdefinidaenotrolugarde
delprograma.Graciasaestasdefinicioneslalnea11escorrecta.Lafuncinfill_inpuedeserinvocada,yla
variabletableesconocida.
Lalnea1deambosficheros(#define)esunadirectivadelpreprocesador,queindicaquetieneque
cambiartodaslasocurrenciasdeunacadenadecaracteresdada(enestecasoSIZE)porunvalorespecfico
(enestecaso,100).Elpreprocesadorcorreautomticamenteantesqueelcompiladoryseencargadeestas
sustituciones.Usaladirectiva#definesiemprequevayasadefinirconstantesentuprograma,sobretodo
paralostamaosdearrays,yescribesiempreesasconstantesenmaysculas,deformaqueseanfcilesde
leerymodificar.
Respondealassiguientespreguntasparaversihasentendidoloqueseexplicaenestedocumento:
1. UnprogramaenCesunconjuntodedefinicionesdetrestipos:variables,funcionesytiposdedatos.
Verdadero
Falso
Denuevo

Soluciones

2. Algunasfuncionesyvariablessepuedenagruparenclases,comoenJava.
Verdadero
Falso
Denuevo

Soluciones

3. Puedoutilizarunafuncinenunficheroyluegodefinirla(incluirsucdigo)enunlugarmsabajodeese
fichero.
Verdadero
Falso
Denuevo

Soluciones

4. Comounafuncinnopuedellamaraotraquenosehayadefinidopreviamente,enCnosepuedenescribir
dosfuncionesquesellamenlaunaalaotra.
Verdadero
Falso
Denuevo

Soluciones

5. Queselprototipodeunafuncin?

http://www.it.uc3m.es/abel/as/DSP/M1/CPrograms_es.html

2/3

19/12/2014

EstructuradeunprogramaenC

Unalneaenelprogramaquetieneslosunombre.
Unalneadecdigoconelnombre,losparmetrosdelafuncinyelresultadoquedevuelve.
Ladefinicindelafuncion:nombreyparmetrosseguidodesucdigo.
Unadescripcinenpapeldeloquedebehacerunafuncinparaluegoimplementarla.
Denuevo

Soluciones

UniversidadCarlosIIIdeMadrid|LicenciaCreativeCommons

http://www.it.uc3m.es/abel/as/DSP/M1/CPrograms_es.html

3/3

You might also like