marzo 26, lunes · 4 funciones y estructura de programa ... main llama a la función de biblioteca...

Post on 18-Jun-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related