Professional Documents
Culture Documents
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