Anders Sjögren ANSI - standard ?
Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt om det gick att exekvera på flera olika sorters datorer, IBM-PC-typ, MacIntosh, SUN, NEXT etc samt under flera operativsystem DOS, UNIX, OS/2, VMS, AOS, mm. Det finns två faktorer som tyvärr förhindrar detta –processortyp olika processorer tolkar maskinkod (ettor och nollor) olika –operativsystem många av tjänsterna man ber om när man programmerar är tjänster som operativsystemet tillhandahåller och eftersom olika operativsystem fungerar olika så måste tjänsten utföras olika
Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt om det gick att exekvera på flera olika sorters datorer, IBM-PC-typ, MacIntosh, SUN, NEXT etc samt under flera operativsystem DOS, UNIX, OS/2, VMS, AOS, mm. Det finns två faktorer som tyvärr förhindrar detta –processortyp olika processorer tolkar maskinkod (ettor och nollor) olika –operativsystem många av tjänsterna man ber om när man programmerar är tjänster som operativsystemet tillhandahåller och eftersom olika operativsystem fungerar olika så måste tjänsten utföras olika Repetition
Anders Sjögren ANSI - standard ? operativsystemtjänst Betrakta följande program. Funktionen printf(...) är en önskan till operativsystemet om att få ”Hello, world ” utskrivet på bildskärmen /*HELLO.C -- Hello, world */ #include int main(void) { printf("Hello, world\n"); return 0; }
Anders Sjögren ANSI - standard ? Det går alltså inte att standardisera en ”exe”- (maskinkods-) fil. Det man kan standardisera däremot är hur källkod skall se ut och här skiljer man på två saker –dels C-språkets syntax, hur man skriver C. –dels på vilka färdiga funktioner ( makro) som skall finnas med i ett standardbibliotek à la ANSI. Varje exekveringsmiljö måste m a o ha sin kompilator
Anders Sjögren ANSI - standard ? exekveringsmiljö ANSI-programmet nedan kompilerat för resp exekverat i –DOS miljö –operativsystem-miljön Windows /*HELLO.C -- Hello, world */ #include int main(void) { printf("Hello, world\n"); return 0; }
Anders Sjögren ANSI - standard ? För att en standardfunktion skall kunna användas krävs att –header-filen ( som är en textfil på samma format som källkodsfilen ) inkluderas i källkoden. Denna fil innehåller önskad funktions deklaration ( eller makro ). –dessutom att funktionens maskinkod ( biblioteksrutiner ) kommer med i ”exe”-filen. Detta sker vid länkningen, mer om detta längre fram. /*HELLO.C -- Hello, world */ #include int main(void) { printf("Hello, world\n"); return 0; }
Anders Sjögren Hur ett program blir till m h a en C-kompilator och länkare Utkast till källkod Papper och penna är en bra början till ett C-program. Kanske utkastet är ett strukturdiagram?
Anders Sjögren Hur ett program blir till m h a en kompilator Utkast till källkod Källkod som text-fil Källkoden skrivs med en Editor eller ordbehandlare in i en text-fil ( ASCII ?)
Anders Sjögren Hur ett program blir till m h a en kompilator Utkast till källkod Källkod som text-fil Kompilator Objektkods-fil (maskinkod) Andra text-filer, t ex (*.h) -filer Preprocessorn Kompilatorn översätter till maskinkod. Kompileringen inleds med preprocessorn som bearbetar, omformar källkodstexten enligt preprocessordirektiven. Inkludering av andra textfiler ( *.h ) sker bl a nu. #include int main(void)
Anders Sjögren Hur ett program blir till m h a länkaren Utkast till källkod Källkod som text-fil Kompilator Objektkods-fil (maskinkod) Andra text-filer, t ex (*.h) -filer Preprocessorn Länkare Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system ”EXE” - fil Länkaren sammanfogar maskinkodsfiler (*.obj) till en programfil ( *.exe ) som är exekverbar. Runtime-delen är kod som måste till för att exekveringen skall kunna ske och har inget med programmets uppgift att göra.
Anders Sjögren Hur ett program blir till m h a länkare Utkast till källkod Källkod som text-fil Kompilator Objektkods-fil (maskinkod) Andra text-filer, t ex (*.h) -filer Preprocessorn Länkare Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system ”EXE” - fil Vilka filer som skall kompileras resp länkas anges i ett projekt eller projektfil. Länkaren sammanfogar maskinkodsfiler (*.obj) till en programfil ( *.exe ) som är exekverbar. Runtime-delen är kod som måste till för att exekveringen skall kunna ske och har inget med programmets uppgift att göra.
Anders Sjögren Hur ett program blir till, exekvering ”EXE” - fil Utkast till källkod Källkod som text-fil Kompilator Objektkods-fil (maskinkod) Andra text-filer, t ex (*.h) -filer Preprocessorn Länkare Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system Operativsystemet laddar primärminnet och startar exekvering Exekvering
Anders Sjögren Hur ett program blir till, exekvering Exekvering Utkast till källkod Källkod som text-fil Kompilator Objektkods-fil (maskinkod) Andra text-filer, t ex (*.h) -filer Preprocessorn Länkare Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system Operativsystemet laddar primärminnet och startar exekvering Data in Data ut ”EXE” - fil
Anders Sjögren ANSI - standarden inkluderingsfiler assert.h- programdiagnostik under körning ctype.h- teckentyptester float.h- flyttalsegenskaper och gränser limits.h- numeriska egenskaper och gränser locale.h- anpassning till lokal miljö math.h- matematiska funktioner setjmp.h- icke lokala hopp i program signal.h- hantering av mjukvaravbrott stdarg.h- variabelt antal parametrar stddef.h- grundläggande typer och makron stdio.h- standard in- och utmatning stdlib.h- generellt användbara funktioner med bl a sortering string.h- hantering av textsträngar time.h- hantering av datum och tid Några axplock
Anders Sjögren ANSI - standarden inkluderingsfiler assert.h- programdiagnostik under körning ctype.h- teckentyptester float.h- flyttalsegenskaper och gränser limits.h- numeriska egenskaper och gränser locale.h- anpassning till lokal miljö math.h- matematiska funktioner setjmp.h- icke lokala hopp i program signal.h- hantering av mjukvaravbrott stdarg.h- variabelt antal parametrar stddef.h- grundläggande typer och makron stdio.h- standard in- och utmatning stdlib.h- generellt användbara funktioner med bl a sortering string.h- hantering av textsträngar time.h- hantering av datum och tid assert Description Tests a condition and possibly aborts. assert is a macro that expands to an if statement; if test evaluates to zero, assert aborts the program (by calling abort) and asserts the following a message on stderr Syntax #include void assert(int test); Assertion failed: test, file filename, line linenum
Anders Sjögren ANSI - standarden inkluderingsfiler assert.h- programdiagnostik under körning ctype.h- teckentyptester float.h- flyttalsegenskaper och gränser limits.h- numeriska egenskaper och gränser locale.h- anpassning till lokal miljö math.h- matematiska funktioner setjmp.h- icke lokala hopp i program signal.h- hantering av mjukvaravbrott stdarg.h- variabelt antal parametrar stddef.h- grundläggande typer och makron stdio.h- standard in- och utmatning stdlib.h- generellt användbara funktioner med bl a sortering string.h- hantering av textsträngar time.h- hantering av datum och tid Några funktioner isalnum isalpha isascii iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit toascii tolower toupper
Anders Sjögren ANSI - standarden inkluderingsfiler assert.h- programdiagnostik under körning ctype.h- teckentyptester float.h- flyttalsegenskaper och gränser limits.h- numeriska egenskaper och gränser locale.h- anpassning till lokal miljö math.h- matematiska funktioner setjmp.h- icke lokala hopp i program signal.h- hantering av mjukvaravbrott stdarg.h- variabelt antal parametrar stddef.h- grundläggande typer och makron stdio.h- standard in- och utmatning stdlib.h- generellt användbara funktioner med bl a sortering string.h- hantering av textsträngar time.h- hantering av datum och tid Innehåller bl a funktioner för filhantering. Detta är ämnet för en hel föreläsning
Anders Sjögren ANSI - standarden inkluderingsfiler assert.h- programdiagnostik under körning ctype.h- teckentyptester float.h- flyttalsegenskaper och gränser limits.h- numeriska egenskaper och gränser locale.h- anpassning till lokal miljö math.h- matematiska funktioner setjmp.h- icke lokala hopp i program signal.h- hantering av mjukvaravbrott stdarg.h- variabelt antal parametrar stddef.h- grundläggande typer och makron stdio.h- standard in- och utmatning stdlib.h- generellt användbara funktioner med bl a sortering string.h- hantering av textsträngar time.h- hantering av datum och tid abortlabsrealloc absldiv atexitlfindatofatoi atollsearchbsearchltoa srandcallocstrtod
Anders Sjögren Slut