200 likes | 416 Views
ANSI - standard ?. 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.
E N D
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
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
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 <stdio.h> int main(void) { printf("Hello, world\n"); return 0; }
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
ANSI - standard ?exekveringsmiljö • ANSI-programmet nedan kompilerat för resp exekverat i • DOS miljö • operativsystem-miljön Windows /* HELLO.C -- Hello, world */ #include <stdio.h> int main(void) { printf("Hello, world\n"); return 0; }
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 <stdio.h> int main(void) { printf("Hello, world\n"); return 0; }
Hur ett program blir till m h a enC-kompilator och länkare Utkast tillkällkod Papper och penna är en bra början till ett C-program. Kanske utkastet är ett strukturdiagram?
Hur ett program blir till m h a enkompilator Utkast tillkällkod Källkod somtext-fil Källkoden skrivs med en Editor eller ordbehandlare in i en text-fil ( ASCII ?)
Hur ett program blir till m h a enkompilator Andra text-filer, t ex (*.h) -filer Preprocessorn Utkast tillkällkod Kompilator Källkod somtext-fil Objektkods-fil (maskinkod) 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 <stdio.h> int main(void)
Hur ett program blir till m h a länkaren Andra text-filer, t ex (*.h) -filer Preprocessorn Utkast tillkällkod Kompilator Källkod somtext-fil Objektkods-fil (maskinkod) Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system Länkare ”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.
Hur ett program blir till m h a länkare Andra text-filer, t ex (*.h) -filer Preprocessorn Vilka filer som skall kompileras resp länkas anges i ett projekt eller projektfil. Utkast tillkällkod Kompilator Källkod somtext-fil Objektkods-fil (maskinkod) Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system Länkare ”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.
Hur ett program blir till, exekvering Andra text-filer, t ex (*.h) -filer Preprocessorn Utkast tillkällkod Kompilator Källkod somtext-fil Objektkods-fil (maskinkod) Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system Länkare ”EXE” - fil Operativsystemetladdar primärminnet och startar exekvering Exekvering
Hur ett program blir till, exekvering Andra text-filer, t ex (*.h) -filer Preprocessorn Utkast tillkällkod Kompilator Källkod somtext-fil Objektkods-fil (maskinkod) Biblioteksrutiner, OBJ-filer kanske ur LIB-filer. runtime-system Länkare ”EXE” - fil Data ut Data in Operativsystemetladdar primärminnet och startar exekvering Exekvering
ANSI - standardeninkluderingsfiler assert.h - programdiagnostik under körningctype.h - teckentyptesterfloat.h - flyttalsegenskaper och gränserlimits.h - numeriska egenskaper och gränserlocale.h - anpassning till lokal miljömath.h - matematiska funktionersetjmp.h - icke lokala hopp i programsignal.h - hantering av mjukvaravbrottstdarg.h - variabelt antal parametrarstddef.h - grundläggande typer och makronstdio.h - standard in- och utmatningstdlib.h - generellt användbara funktioner med bl a sorteringstring.h - hantering av textsträngartime.h - hantering av datum och tid Några axplock
ANSI - standardeninkluderingsfiler assert.h - programdiagnostik under körningctype.h - teckentyptesterfloat.h - flyttalsegenskaper och gränserlimits.h - numeriska egenskaper och gränserlocale.h - anpassning till lokal miljömath.h - matematiska funktionersetjmp.h - icke lokala hopp i programsignal.h - hantering av mjukvaravbrottstdarg.h - variabelt antal parametrarstddef.h - grundläggande typer och makronstdio.h - standard in- och utmatningstdlib.h - generellt användbara funktioner med bl a sorteringstring.h - hantering av textsträngartime.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 <assert.h> void assert(int test); Assertion failed: test, file filename, line linenum.......
ANSI - standardeninkluderingsfiler assert.h - programdiagnostik under körningctype.h - teckentyptesterfloat.h - flyttalsegenskaper och gränserlimits.h - numeriska egenskaper och gränserlocale.h - anpassning till lokal miljömath.h - matematiska funktionersetjmp.h - icke lokala hopp i programsignal.h - hantering av mjukvaravbrottstdarg.h - variabelt antal parametrarstddef.h - grundläggande typer och makronstdio.h - standard in- och utmatningstdlib.h - generellt användbara funktioner med bl a sorteringstring.h - hantering av textsträngartime.h - hantering av datum och tid Några funktioner isalnum isalpha isascii iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit toascii tolower toupper
ANSI - standardeninkluderingsfiler assert.h - programdiagnostik under körningctype.h - teckentyptesterfloat.h - flyttalsegenskaper och gränserlimits.h - numeriska egenskaper och gränserlocale.h - anpassning till lokal miljömath.h - matematiska funktionersetjmp.h - icke lokala hopp i programsignal.h - hantering av mjukvaravbrottstdarg.h - variabelt antal parametrarstddef.h - grundläggande typer och makronstdio.h - standard in- och utmatningstdlib.h - generellt användbara funktioner med bl a sorteringstring.h - hantering av textsträngartime.h - hantering av datum och tid Innehåller bl a funktioner för filhantering. Detta är ämnet för en hel föreläsning
ANSI - standardeninkluderingsfiler assert.h - programdiagnostik under körningctype.h - teckentyptesterfloat.h - flyttalsegenskaper och gränserlimits.h - numeriska egenskaper och gränserlocale.h - anpassning till lokal miljömath.h - matematiska funktionersetjmp.h - icke lokala hopp i programsignal.h - hantering av mjukvaravbrottstdarg.h - variabelt antal parametrarstddef.h - grundläggande typer och makronstdio.h - standard in- och utmatningstdlib.h - generellt användbara funktioner med bl a sorteringstring.h - hantering av textsträngartime.h - hantering av datum och tid abort labs realloc abs ldiv atexit lfind atof atoi atol lsearch bsearch ltoa srand calloc strtod ..............