Marzo28,Lunes
Agendaparaestaclase� ConformacióndeEquipos� IntroducciónalLenguajedeProgramaciónC� “ElLenguajedeProgramaciónC”aka“ElLibroBlanco”aka“K&R”
� ElProcesodeCompilación,versiónsimplificada� ElPreprocesador� Intervalo� AnálisisySíntesisdeHello.c� AutómataFinitoparaIdentificadores� Sintaxis,Semántica,yPragmática� VersionesdelEstándar
Prof. Esp. Ing. José María Sola 66
ConformacióndeEquipos1. Cincointegrantescomomínimo2. Porequipo,enviarunmaila
[email protected],nombresyusuariogithubdecadaintegrante.
Prof. Esp. Ing. José María Sola 67
Descripcióngeneral_� LPdepropósitogeneral,noestáespecializado� Economíaenlasexpresiones,peroexpresivo� Controldeflujo(¿dequé?)� Estructurasdedatos� Grancantidaddeoperadores� Flexible� Noesdemuyaltonivel(¿dequé?)� Noesgrande(¿enquésentido?)� Sufaltaderestriccionesysugeneralidadlohacenefectivo
� Independientedemáquina,portable(procesadorysistemaoperativo).
Prof. Esp. Ing. José María Sola 69
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 70
� OtrosLP� C++� Objective-C� C#� D� Java
� 1966-1973� Elaboración.BasadoenB,a
suvez,basadoenBCPL� CPreestandarización
� 1978� K&R1eraedición
� 1983� Comienzaestandarización
� 1988� K&R2daedición
� 1989-90� C89–C90(1eraversión
estándar)� 1999
� C99(2daversiónestándar)� 2011
� C11(3eraversiónestándar)
EvolucióndeCyLPrelacionados_
Prof. Esp. Ing. José María Sola 71
“ElLenguajedeProgramaciónC”aka“ElLibroBlanco”aka“K&R”
� Autores:� DennisRitchieautordel
LPycoautordeUnixconKenThompson
� Kernighan� Requisitos
� Conocimientodeprogramación
� Lecturaatenta� Ejercicios� Edicionesyusos
� 19781eraEdición� Manualdereferencia
� 19882daEdición� ANSIC
� Preliminares(FrontMatter)� Prefacio� Prefaciodelaprimera
edición� Introducción
� General,“Ancho”� Capítulo1:Tutorial
� En“profundidad”:Capítulos2a7� 2Tipos,Operadoresy
Expresiones� 3ControldeFlujo� 4Funcionesy
EstructuradePrograma
� 5PunterosyArreglos� 6Estructuras� 7EntradaySalida
� EjemploIntegrador� 8InterfazdeSistema
deUNIX–entrada/salida,sistemadearchivosyalocacióndememoria
� “Apéndices”� A:Especificacióndel
LP:Semántica(LN)ySintaxis(BNF)
� B:Bibliotecaestándar.
K&R1.1UnaIntroducciónTipoTutorial–Empezando
#include <stdio.h> main( ) { printf("Hello, World!\n"); } > cc hello.c > hello.exe Hello, World!
"Hello,World!"–DemostracióndeCompilaciónyEjecución
Ejercicios� 1-1.Experimentarconeliminacióndepartesycompilar� 1-2.Probardiferentes\c.
Prof. Esp. Ing. José María Sola 76
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� Comparacione
� ContrastarconMáquinaVirtualyBytecode� ConstrastarconLenguajesInterpretados
Prof. Esp. Ing. José María Sola 79
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 80
Prof. Esp. Ing. José María Sola 81
#include <_____.h> return/*entre*/0; return0; return 0;
� Incluirarchivos,directiva#include� Reemplazarcomentarios.
DosFuncionesBásicasdelPreprocesador
Prof. Esp. Ing. José María Sola 84
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
ProgramaGeneral ProgramaHello
� 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ónde‘Hello,World!’
Prof. Esp. Ing. José María Sola 87
ComponentesdeunAutómataFinito� Estados
� Inicial� Finales
� Transición� Origen� Evento� Destino� Transiciónreflexiva
� Alfabeto� Ejemplo:Identificadores
Prof. Esp. Ing. José María Sola 88
Prof. Esp. Ing. José María Sola 89
#include <stdio.h> main( ) { printf( "Hello, World!\n" ); }
Otrasversiones–¿MismasSintaxis,SemánZca,yPragmáZca?
#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 91
DiferenciasconANSIC(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"); }
Tareasparalapróximaclase1. ConformarEquipos2. Resolver[K&R1988]1-1a1-33. Estudiar[K&R1988]
• 1.4ConstantesSimbólicas• 1.5EntradaySalidadeaCaracteres
Prof. Esp. Ing. José María Sola 93
Términosdelaclase#Definircadatérminoconlabibliograca� ParteI
� Niveldeabstracción� IndependientedeMáquina� Controldeflujodeejecución� HistoriadeCydeANSIC� RelaciónentreCyC++� ANSIC,C89óC90� C99� C11
� ParteII� “ElLenguajedeProgramaciónC”aka
“ElLibroBlanco”aka“K&R”� ParteII
� Fuente� Compilador� Ejecutabe
� ParteIII� 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
� ParteIV� #include� Tratamientodecomentariosporparte
delpreprocesador� ParteV
� main� printf� Funcióndel#include� puts� Secuenciadeescape� TerminadordesentenciadeC� SeparadordesentenciasdePascal� EstructuralinealdeunprogramaC� Estructurajerárquicadeunprograma
Pascal� Archivo.h(Encabezado)� Stringliteral:CadenaLiteral,oLiteral
decadena,oConstantecadena,oCadenaconstante
� ParteVI� Identificadores� AutómataFinito� Estados
� Inicial
� Finales� Transición
� Origen� Evento� Destino� Transiciónreflexiva
� Alfabeto� ParteVII
� ComparaciónSintaxis,Semántica&Pragmática
� ParteVIII� puts� EXIT_SUCCESS
03
Prof. Esp. Ing. José María Sola 94