Post on 18-Jun-2020
Marzo26,Lunes
Agendaparaestaclase� IntroducciónalLenguajedeProgramaciónC� Intervalo� “ElLenguajedeProgramaciónC”aka“ElLibroBlanco”aka“K&R”
� ElProcesodeCompilación,versiónsimplificada� Otrasversionesdehello.c� ElPreprocesador� Sintaxis,Semántica,yPragmática� AnálisisySíntesisdeHello.c
Prof. Esp. Ing. José María Sola 56
� LPdepropósitogeneral,noestáespecializado
� Economíaenlasexpresiones,peroexpresivo� Pocotexto,muchainformación� Variabilidadentexto,variabilidad
ensignificado.� Controldeflujo(¿dequé?)� Estructurasdedatos� Grancantidaddeoperadores� Flexible� Noesdemuyaltonivel(¿dequé?)� Noesgrande(¿enquésentido?)� Sufaltaderestriccionesysu
generalidadlohacenefectivo� Independientedemáquina,portable
(procesadorysistemaoperativo)� EllenguajedeprogramacióndeUnix
� Primerlenguajedealtoniveleficienteyportable� Enelmomento,menos
problemasque� Basic,PL/I,Fotran,Cobol,Pascal
� ComparadoconLisp� Vinculación� Másrápdo� ConGC,locualnoesapropiado
paraprogramacióndesistemas� Ceslamejorasbtracciónde
unacomputadoraexistente,nodeundispositivoimaginario
� Suficientesestructurasdecontrolydedatospararesolverproblemas,limitadasparaquesepuedaimplementarelcompilador.
Descripcióngeneral
Prof. Esp. Ing. José María Sola 58
FrasessobreC� CnoesunLPgrande,ynolequedabienunlibrogrande(K&R)
� Ctienevueltas,falenciasyunenormeéxito(Ritchie)� Cesunarmafilosa,conlasepuedenhacerprogramaseficientesyelegantesouna“carnicería”(Pike)
� CmejoraamedidaqueunoganaexperienciaconC(K&R)(Curvadeaprendizajeempinada).
Prof. Esp. Ing. José María Sola 59
� 1969-1973� Elaboración.BasadoenB,
asuvez,basadoenBCPL� CPreestandarización
� 1978� K&R1eraedición
� 1983� Comienza
estandarización� 1988
� K&R2daedición� 1989-90
� C89–C90(1eraversiónestándar)
� 1999� C99(2daversión
estándar)� 2011
� C11(3eraversiónestándar)
� OtrosLP� C++� Objective-C� C#� D� Java
HistoriadeCyLPrelacionados
Prof. Esp. Ing. José María Sola 60
K&R1.1UnaIntroducciónTipoTutorial–Empezando
“ElLenguajedeProgramaciónC”aka“ElLibroBlanco”aka“K&R”
� Autores:� DennisRitchieautordelLPy
coautordeUnixconKenThompson
� Kernighan� Requisitos
� Conocimientodeprogramación� Lecturaatenta
� Ejercicios� Edicionesyusos
� 19781eraEdición� Manualdereferencia
� 19882daEdición� ANSIC
� Preliminares(FrontMatter)� Prefacio� Prefaciodelaprimeraedición� Introducción
� General,“Ancho”� Capítulo1:Tutorial
� En“profundidad”:Capítulos2a7� 2Tipos,OperadoresyExpresiones� 3ControldeFlujo� 4FuncionesyEstructurade
Programa� 5PunterosyArreglos� 6Estructuras� 7EntradaySalida
� EjemploIntegrador� 8InterfazdeSistemadeUNIX–
entrada/salida,sistemadearchivosyalocacióndememoria
� “Apéndices”� A:EspecificacióndelLP:
Semántica(LN)ySintaxis(BNF)� B:Bibliotecaestándar� C:Cambiosintroducidosenla
primeraversióndelestándar.
"Hello,World!"–DemostracióndeCompilaciónyEjecución#include <stdio.h> main( ) { printf("Hello, World!\n"); } > cc hello.c > hello.exe Hello, World!
Ejercicios� 1-1.Experimentarconeliminacióndepartesycompilar� 1-2.Probardiferentes\c.
Prof. Esp. Ing. José María Sola 65
Prof. Esp. Ing. José María Sola 66
DiferenciasconEstándarC(yconC++)main( ){ puts("Pre Ansi"); }
#include <stdio.h> int main(void){ puts("Post Ansi"); return 0; }
#include <stdio.h> #include <stdlib.h> int main(void){ puts("Post Ansi"); return EXIT_SUCCESS; }
#include <iostream> int main() { std::cout << "ANSI C++\n"; }
#include <stdio.h> int main(void){ puts("Post Ansi"); }
HelloWorld/* Hello World * JMS * 20150402 */ #include <stdio.h> int main(void){ printf("Hello, World!\n"); }
Tiempos� Tiempodediseño� Tiempodetraducción(compilación)
1. TiempodePreprocesamiento2. TiempodeCompilación3. TiempodeVinculación
� Tiempodeejecución� Comparaciones
� ContrastarconMáquinaVirtualyBytecode� ConstrastarconLenguajesInterpretados
Prof. Esp. Ing. José María Sola 70
ElProcesodeCompilación,VersiónSimplificada
Compilador LinkerHello.c
(código fuente)
Hello(ejecuta-
ble)
Hello(objeto)
#include
Biblioteca Standard
stdio.h(encabe-
zado standard)
Prof. Esp. Ing. José María Sola 71
Prof. Esp. Ing. José María Sola 72
#include <_____.h> return/*entre*/0; return0; return 0;
� Incluirarchivos,directiva#include� Reemplazarcomentarios.
DosFuncionesBásicasdelPreprocesador
Prof. Esp. Ing. José María Sola 74
#include <stdio.h> main( ) { printf( "Hello, World!\n" ); }
Otrasversiones–¿MismasSintaxis,SemánWca,yPragmáWca?
#include <stdio.h>
main( ){
printf( "Hello," );
printf( " World!" );
printf( "\n" );
}
#include <stdio.h>
main( ){
printf( "Hello,"
"World!"
"\n" );
}
#include <stdio.h>
main( ){
puts( "Hello, World!" );
}
Prof. Esp. Ing. José María Sola 76
Defineunafunciónllamadamainquenorecibevaloresargumento.Lassentenciasdemainseencierranentrellaves
Incluyeinformaciónacercadelabibliotecaestándar#include <stdio.h> main( ) { printf("Hello, World!\n"); }
Análisisde‘Hello,World!’
� Estructuradeunprograma� vs.Pascal
� Linealvs.Jerárquico
� Roldemain� Preprocesador� Bibliotecaestándar:
Entrada/Salida� vsFramework
� Roldellaves{}� Funciónprintf� Pasajede
argumentosafunciones
� Constantesdecadenaoliteralcadena
� Secuenciadeescape� Puntoycomacomo
terminador� vs.Pascal
� Analizarquees“palabra”delLPyqueno
� Identificadores:mainyprintf--¿Cuáleselautómatafinitoquelosreconoce?
mainllamaalafuncióndebibliotecaestándarprintfparaimprimiresasecuenciadecaracteres.\nrepresentaelcarácternueva-linea
Prof. Esp. Ing. José María Sola 78
ProgramaGeneral hello.c
� Unprogramaesunasecuenciadefunciones.Formageneral:main fg…
� FormageneraldeunafunciónTipoNombre(Parámetros){Cuerpo}
� Cuandosecorre(ejecuta)unprograma,porconvención,maineslaprimerafuncióninvocadaporelambientedeejecución(e.g.,sistemaoperativo).Todoprogramadebetenerunmainconosinparámetros
� Esteprogramadefinesololafunciónmain
� Comotodafunción,mainpuedeteneronoparámetros
� Estemaininvocaaprintfconunacadenaliteral(cadenaconstante)comoargumento."Entrecomillas".
Generalizacióndehello.c
Términosdelaclase#Definircadatérminoconlabibliograaa� IntroducciónalLenguajede
ProgramaciónC� Niveldeabstracción� IndependientedeMáquina� Controldeflujodeejecución� HistoriadeCydeANSIC� RelaciónentreCyC++� ANSIC,C89óC90� C99� C11
� K&RCapítulo#1� “ElLenguajedeProgramaciónC”
aka“ElLibroBlanco”aka“K&R”� OtrasversionesdeHello.c
� Tipointimplícito� Valorretornadopormain� Concatenacióndecadenas� Múltiplesinvocaciones� puts� EXIT_FAILURE� stdlib.h
� ProcesodeCompilación,VersiónSimplificada� Fuente� Compilador� Ejecutabe� Comentariosmínimosenarchivos
fuente� Tiempodediseño� Tiempodetraducción� TiempodePreprocesamiento� TiempodeCompilación� TiempodeVinculación(linker)� Bibliotecaestándar� Tiempodeejecución� ContrasteconFramework� Funcióndelcompilador� Vinculador(Linker)� ContrasteconMáquinavirtual� Bytecode
� Preprocesador� #include� Tratamientodecomentariospor
partedelpreprocesador� Sintaxis,Semántica,yPragmática
� Sintaxis� Semánctica� Pragmática
� AnálisisySíntesisdehello.c� main� printf� Funcióndel#include� puts
� Secuenciadeescape� TerminadordesentenciadeC� SeparadordesentenciasdePascal� Archivo.h(Encabezado)� Stringliteral:CadenaLiteral,o
Literaldecadena,oConstantecadena,oCadenaconstante
� LenguajeEnsamblador� Stack� EstructuralinealdeunprogramaC� Estructurajerárquicadeun
programaPascal
02
Prof. Esp. Ing. José María Sola 80
Tareasparalapróximaclase1. EntregaTrabajo#02. Leerde[K&R1988]desde1.2VariablesyExpresiones
Aritméticashasta1.4ConstantesSimbólicasinclusive.
Prof. Esp. Ing. José María Sola 81