Sunteți pe pagina 1din 9

Carrera

C
Expert
CLA Carrera Linux Argentina 1 Ing. Diego Crdoba / @d1cor
Temario
Introduccin..........................................................................................................................................................3
Breve historia de C ........................................................................................................................................3
Caractersticas del lenguae.........................................................................................................................3
C ! la orientacin a obetos..........................................................................................................................."
#ntorno de trabao en C ..............................................................................................................................."
Co$%ilando nuestra a%licacin...................................................................................................................."
Conce%tos de %rogra$acin& los algorit$os.............................................................................................'
Buenas %racticas de %rogra$acin..................................................................................................................(
Introduccin
)u* es el lenguae de %rogra$acin C+ ,encilla$ente- el lenguae de %rogra$acin $.s %o%ular !
di/undido del $undo. 01or 2u*+ 1or ser un lenguae 2ue- a %esar de su di/icultad relativa con el
resto- gusta a los %rogra$adores.
3na ve4 2ue alguien co$ien4a a %rogra$ar en lenguae C- $u! raras ocasiones ca$bia a otro
lenguae de %rogra$acin. #sto se debe a 2ue C es un lenguae elegante %ara %rogra$ar- sutil !
detallista- ! esto le da una de sus caractersticas $.s i$%ortantes& %otencia ! /lexibilidad.
#s un lenguae estructurado 2ue- si$%le$ente- no tiene li$ites5
C no es un lenguae co$ercial creado %or una necesidad de $ercado %ara desarrollar a%licaciones
$.s e/iciente$ente- sino 2ue /ue creado %or un %e2ue6o gru%o de %rogra$adores- ! escrito %ara
%rogra$adores 2ue buscan el $eor lenguae de %rogra$acin.
Breve historia de C
#l lenguae C /ue inventado %or Dennis 7itche sobre un e2ui%o D#C 1D1811 2ue utili4aba un
siste$a o%erativo 3nix. C surgi de un lenguae antiguo lla$ado BC1L desarrollado %or 9artin
7ichards. BC1L deriv en el lencuae B de :en ;ho$%son- ! 2ue luego iba a evolucionar a C en los
a6os <=.
Durante los %ri$eros a6os el est.ndar C era el %las$ado %or 7itche ! :erninghan en su libro >C
1rogra$$ing Language?- %ublicado %or 1rentice8@all en 1A<(- %ero luego- debido a la gran
%o%ularidad del lenguae- en 1A(3 se organi4 un co$it* 2ue cre el est.ndar AB,I C- %roceso 2ue
dur ' a6os- ado%tando /inal$ente dicho est.ndar en 1A(A- ! en 1AA= estuvieron dis%onibles las
%ri$eras co%ias %ara el %ublico en general.
@o! en dia la totalidad de los co$%iladores actuales ace%tan el estandar AB,I C- ! es %or ello 2ue
en este curso va$os a a%render este est.ndar- con el /in de 2ue nuestro cdigo %ueda ser
co$%ilado bao cual2uier ar2uitectura de so/tCare de base sin $a!ores ca$bios- en co$%iladores
2ue so%orten el est.ndar AB,I C.
Caractersticas del lenguaje
A $enudo se lo deno$ina a C un lenguae de >$edio nivel?. #sto es %or2ue en la *%oca en la 2ue
/ue creado existan dos ti%os de lenguaes& de >alto nivel?- ! de >bao nivel?.
#n bao nivel tene$os- %or ee$%lo- al lenguae ensa$blador- o asse$bler- 2ue re%resenta
si$blica$ente ! en /or$a directa- instrucciones de $.2uina 2ue se eecutan en la co$%utadora- el
%rogra$ador trabaa- de $anera si$blica- con las instrucciones 2ue /inal$ente eecutar. la
8 3 8
co$%utadora. Ade$.s- el lenguae ensa$blador no so%orta estructuras de control de /luo del
%rogra$a- es %ura$ente secuencial- una instruccin debao de la otra.
1or el contrario- un lenguae de alto nivel trabaa $ucho $.s leos de la eecucin real de la
co$%utadora- $.s cerca del usuario /inal o %rogra$ador.
3n lenguae de alto nivel a$ortigua la tarea del %rogra$ador /rente a la co$%utadora- ! %ro%orciona
diversas estructuras de control e instrucciones de entrada/salida %ara lograr una $a!or /acilidad !
%roductividad a la hora de %rogra$ar.
#sto hace 2ue las instrucciones no se relacionen directa$ente con el $odo en 2ue la co$%utadora
ter$ina /inal$ente eecutando las instrucciones. La %rinci%al consecuencia de esto es 2ue el
lenguae de %rogra$acin- al tener 2ue >traducir? cada instruccin de alto nivel a varias
Dgeneral$ente $uchasE instrucciones de bao nivel- el binario eecutable /inal no sea el $.s
e/iciente.
Conclusin- %ara lograr un %rogra$a e/iciente ! con un buen uso de los recursos de la co$%utadora
necesita$os escribirlo en lenguae ensa$blador... %ero es una tarea $u! ardua ! di/cil- ! re2uiere
$uchos conoci$ientos de la ar2uitectura interna del $icro%rocesador.
#s %or esto 2ue surgi un lenguae casi tan e/iciente co$o el ensa$blador- %ero con una $a!or
/acilidad a la hora de %rogra$ar- ! ese lenguae /ue el C 2ue todos conoce$os.
C inicial$ente se utili4aba %ara %rogra$acin de so/tCare de base- siste$as o%erativos- nFcleos-
controladores- so/tCare 2ue a!udan al /unciona$iento en s de la co$%utadora. @o! en da- la
enor$e %o%ularidad del lenguae C lo hacen a%to %ara casi cual2uier entorno ! so/tCare a
desarrollar. @o! los %rogra$adores utili4an C casi %ara cual2uier cosa- es un lenguae 2ue su%er
de/initiva$ente la barrera del tie$%o- ! %osee versatilidad ! %otencia $.s 2ue co$%robada.
Gtras caractersticas de C tienen 2ue ver con la conversin de ti%os de datos. #n C %ode$os
al$acenar un dato de un deter$inado ti%o en una variable de un ti%o >si$ilar?- no necesaria$ente
del $is$o ti%o- $ediante algo tan Ftil co$o lo es la conversin de ti%os- $oldes de ti%o o casting-
caractersticas 2ue no %oseen todos los lenguaes de %rogra$acin.
Ade$.s tiene un nu$ero reducido de %alabras clave- o sea- %alabras 2ue usa el lenguae %ara
de/inir sus estructuras ! datos- ! 2ue no %ode$os utili4ar co$o %rogra$adores %ara otro %ro%sito.
1or ee$%lo- la %alabra >$ain? hace re/erencia a la /uncin %rinci%al de eecucin de un %rogra$a en
C- ! no %ode$os usar esa %alabra %ara otra cosa. #n C la cantidad de %alabras clave es de solo 3<
t*r$inos5
Gtra de las caractersticas de C es 2ue %osee una biblioteca de /unciones est.ndar- lo 2ue nos
%er$ite si$%le$ente cargar- en cada %rogra$a- Fnica$ente las bibliotecas o /unciones 2ue va$os
a utili4ar- ! no todo el set de /unciones 2ue tene$os a dis%osicin.
#sta estructura nos da la %osibilidad ta$bi*n de desarrollar nosotros nuestras bibliotecas- nuestros
archivos de cabecera de declaraciones ! %oder agregarlos a nuestros %rogra$as cuando
necesite$os- o co$%artirlo a otro %rogra$ador 2ue %ueda serle Ftil.
8 H 8
C y la orientacin a objetos
C es un lenguae estructurado- en este curso se a%render. a %rogra$ar en C de $anera
estructurada... lo 2ue no i$%lica 2ue no %oda$os a%rovechar lo a%rendido %ara %rogra$ar en /or$a
orientada a obetos5
Con el aveni$iento del %aradig$a de %rogra$acin orientado a obetos- surgi ta$bi*n una versin
a$%liada ! $eorada de C con so%orte de orientacin a obetos- lla$ada CII- %ero es una versin
de desarrollo GG 2ue se sustenta en las bases de %rogra$acin C tradicional- %or lo 2ue %ara %oder
a%render a trabaar con CII ! sus estructuras- es necesario antes saber %rogra$ar en C- !a 2ue la
sintaxis es exacta$ente la $is$a- a la 2ue su$a estructuras %ro%ias de la orientacin a obetos.
#n /in- sabiendo %rogra$ar en C- solo es necesario ca$biar el $odo de desarrollo- la >estructura
$ental? de desarrollo hacia el %aradig$a orientado a obetos- sin %erder lo a%rendido.
Incluso lenguaes tan %o%ulares en la actualidad en el $undo de la orientacin a obetos- co$o Java-
utili4an sintaxis ! estructuras de control exacta$ente iguales a las de C- con el obetivo de 2ue
2uienes se%an desarrollar en C %uedan ta$bi*n trabaar en orientacin a obetos con Java.
Entorno de trabajo en C
#l cdigo C es texto %lano- escribir cdigo %ara un %rogra$a en C es escribir archivos de texto con
instrucciones de eecucin ! sintaxis de C.
0C$o va$os a trabaar+ ,i$%le$ente- escribiendo nuestros %rogra$as con la a!uda de cual2uier
editor de textos- ! luego co$%ilando el so/tCare
#xisten entornos integrados de desarrollo- o ID#Ks DIntegrated Develo%$ent #nviron$entE 2ue
%er$iten en una $is$a inter/a4 introducir el cdigo- incluso con a!udas co$o el autoco$%letado o
el coloreado de sintaxis- ! luego %ode$os eecutar ese cdigo ! ver su salida de eecucin en una
ter$inal del $is$o entorno.
Gtra o%cin- ! es la 2ue co$Fn$ente utili4a$os 2uienes trabaa$os en Linux ! derivados- es la de
escribir nuestros cdigos en algFn editor de textos de nuestra %re/erencia- ! luego co$%ilarlo !
linLearlo con la suite de co$%ilacin del %ro!ecto MB3& el MCC Mnu Co$%iller Collection.
La ventaa de %rogra$ar usando el C del est.ndar AB,I- es 2ue %ode$os co$%ilar el cdigo
utili4ando cual2uier co$%ilador $oderno 2ue so%orte dicho est.ndar.
Compilando nuestra aplicacin
C es un lenguae co$%ilado- lo 2ue signi/ica 2ue cuando va$os a escribir nuestro cdigo /uente en
8 " 8
un archivo de texto- o varios archivos- ! luego va$os a generar un cdigo binario eecutable a %artir
de esos archivos- ! %ara una ar2uitectura de so/tCare de base deter$inada.
3na ve4 2ue tene$os el cdigo /uente escrito- el co$%ilador de C- cual2uiera sea- lleva a cabo el
lla$ado >%re%rocesado? del cdigo- inter%retando todas las sentencias de %re8%rocesa$iento- o
instrucciones 2ue nosotros %ode$os colocar en el cdigo- ! 2ue deben ser >co$%iladas? antes de la
co$%ilacin real.
#sta eta%a de %re%rocesado inter%reta las sentencias de %re%rocesa$iento- ! 2uita los co$entarios
incluidos en el cdigo /uente.
Luego lleva$os a cabo el %roceso de co$%ilacin %ro%ia$ente dicho- ! se reali4a sobre el cdigo
/uente %revia$ente %re%rocesado.
Durante la co$%ilacin se veri/ican errores de sintaxis ! de se$.ntica- ! en el caso de no %roducirse
errores- se genera un cdigo obeto- !a escrito en lenguae de $.2uina >casi? listo %ara eecutarse.
#s un cdigo >casi? listo %ara eecutarse %or2ue general$ente va a necesitar enla4arse con libreras
del siste$a 2ue contengan las de/iniciones de las /unciones 2ue ha!a$os utili4ado en nuestro
cdigo.
#sta Flti$a eta%a es la de linL- o enlace de bibliotecas- ! %roduce un binario eecutable %ara la
ar2uitectura en la 2ue este$os co$%ilando5
#s %or esta ra4n 2ue un cdigo eecutable lo es solo %ara un ,G ! no %ara todos- %ues cada
siste$a o%erativo $anea de $anera di/erente los %rocesos ! su $a%a de $e$oria.
Conceptos de programacin: los algoritmos
3n algorit$o es un conunto de instrucciones ordenado ! /inito 2ue nos %er$ite resolver un %roble$a
deter$inado.
Los algorit$os ex%resan los %asos o instrucciones necesarias %ara alcan4ar un obetivo- cual2uiera
sea- algo tan sencillo co$o su$ar dos nF$eros.
Los algorit$os se %ueden re%resentar de di/erentes $aneras- %seudocdigo- diagra$as de /luo- !
%or su%uesto- un lenguae de %rogra$acin.
La di/erencia radica en la /acilidad 2ue tene$os %ara interactuar con el resto de las %ersonas.
9uchas veces va$os a %rogra$ar %ara alguien 2ue nos contrata- ! 2ue necesita resolver un
%roble$a- ! resulta $ucho $.s /.cil interactuar con esta %ersona- 2ue segura$ente no sabr. de
%rogra$acin- haci*ndolo a trav*s de un diagra$a de /luo- o de lenguae colo2uial co$o
%seudocdigo- ! luego %ode$os traducir estos datos a un lenguae de %rogra$acin co$o C- !
lograr 2ue se resuelva el %roble$a.
1or ee$%lo- su%onga$os 2ue necesita$os resolver una tarea tan si$%le co$o un cociente.
1ri$ero %odra$os %lantear un diagra$a de /luo de %ara ex%resar la situacin- ! hacerlo de $anera
8 ' 8
tan sencilla 2ue sea /.cil de entender %ara alguien 2ue no conoce de %rogra$acin.
#l %seudocdigo de dicho ee$%lo sera algo si$ilar al siguiente&
ingresar el numerador
ingresar el denominador
si el denominador es distinto de 0
mostrar numerador / denominador
sino
mostrar error
N el diagra$a de /luo sera algo co$o esto&
Co$o ve$os- son /or$as $u! si$%les de ex%licarle a un usuario /inal el /unciona$iento del
%rogra$a.
Luego ser. cuestin de codi/icar este /unciona$iento en un lenguae de %rogra$acin. 1ara tener
una idea de lo 2ue va$os a hacer en estas clases- el cdigo C %ara este %roble$a sera el siguiente&
8 < 8
float numerador=0, denominador=0;
scanf(%f,&numerador);
scanf(%f,&denominador);
if (denominador != 0){
printf(El cociente es: %.2f\n,numerador/denominador);
}else
printf(ERROR: el denominador es 0);
Buenas practicas de programacin
Co$o se ve en estos cdigos- ! a%rovechando 2ue es nuestra %ri$era i$%resin con C- debe$os
notar la tabulacin o es%aciado de instrucciones en algunas lineas de cdigo. #sto se deno$ina
>indentacin?- ! de ahora en adelante lo inter%retare$os co$o una regla obligatoria a la hora de
%rogra$ar en C.
#l co$%ilador no ve un error si lo o$iti$os- de hecho no to$a los es%acios- %ero s es
extre$ada$ente Ftil %ara %oder leer sin di/icultades nuestro cdigo /uente.
;odo el cdigo 2ue lea$os de so/tCares 2ue %oda$os obtener con licencia libre u o%ensource
estar. desarrollado de esta $anera.
Botar. el lector 2ue es $ucho $.s sencillo leer el cdigo de arriba- 2ue este siguiente&
/loat nu$eradorO=- deno$inadorO=Pscan/D>Q/?-Rnu$eradorEPscan/D>Q/?-Rdeno$inadorEPi/
Ddeno$inador5O=ES%rint/D>#l cociente es& Q.T/Un?-nu$erador/deno$inadorEPVelse %rint/D>#77G7& el
deno$inador es =?EP
Ade$.s- ! co$o nota a este %e2ue6o /rag$ento de cdigo- ve$os 2ue es un algorit$o secuencial
2ue inclu!e una estructura de control- b.sica$ente una estructura de decisin 2ue bi/urca la
eecucin del %rogra$a en dos ra$as di/erentes de%endiendo de la condicin de entrada.
As co$o ahora vi$os esta estructura- existen otro ti%o de estructuras de control- de bi/urcacin
$ulti%le- de ciclos o bucles- etc- 2ue ire$os a%rendiendo a $edida 2ue avance$os en nuestro
conoci$iento de lenguae C5
Gtra buena %ractica de desarrollo en C es crear un directorio %or %ro!ecto de so/tCare- 2ue
contenga archivos de cdigo /uente- ! cuando desarrolle$os cdigo 2ue haga uso de /unciones-
va$os a se%arar ta$bi*n en archivos de texto tanto la /uncin %rinci%al- co$o las /unciones
secundarias ! los archivos de cabecera- de los cuales hablare$os $.s adelante.
Gtra excelente %r.ctica es la de docu$entar el cdigo /uente $ediante co$entarios. #sto nos da
8 ( 8
dos ventaas. 3na- %oder %asarle un %ro!ecto de so/tCare a otro desarrollador ! /acilitarle la
co$%rensin del $is$o. N segundo- %oder nosotros $is$os entender nuestros cdigos $ucho
tie$%o des%u*s de haberlos desarrollado.
9as adelante- a $edida 2ue avance$os- va$os a seguir hablando sobre buenas %racticas en lo
2ue tiene 2ue ver con variables autodocu$entadas- la %rohibicin de usar variables globales
sie$%re 2ue se %ueda- liberar $e$oria antes de cerrar nuestras a%licaciones- etc.
8 A 8

S-ar putea să vă placă și