Kurs programowania w C cz. 151

Nasza ocena:

5
Wyświetleń: 574
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 151 - strona 1

Fragment notatki:

Rozdział 24 Przenośność programów Jak dowiedziałeś się z poprzednich rozdziałów tego podręcznika, język C umożliwia two- rzenie programów, które mogą być uruchamiane na różnych platformach sprzętowych pod warunkiem ich powtórnej kompilacji. Język C należy do grupy języków wysokiego poziomu, które tłumaczone są do poziomu kodu maszynowego (tzn. kod źródłowy jest kompilowany). Z jednej strony jest to korzystne posunięcie, gdyż programy są szybsze i mniejsze niż programy napisane w językach interpretowanych (takich, w których kod źródłowy nie jest kompilowany do kodu maszynowego, tylko  na bieżąco  interpretowany przez tzw. interpreter). Jednak ist- nieje także druga strona medalu — pewne zawiłości sprzętu, które ograniczają przenośność programów. Ten rozdział ma wyjaśnić Ci mechanizmy działania sprzętu w taki sposób, abyś bez problemu mógł tworzyć poprawne i całkowicie przenośne programy. Niezdefiniowane zachowanie i zachowanie zależne od implementacji W trakcie czytania kolejnych rozdziałów można było się natknąć na zwroty takie jak za- chowanie niezdefiniowane (ang.  undefined behaviour  ) czy zachowanie zależne od implementacji (ang.  implementation-defined behaviour  ). Cóż one tak właściwie oznaczają? Zacznijmy od tego drugiego. Autorzy standardu języka C czuli, że wymuszanie jakiegoś konkretnego działania danego wyrażenia byłoby zbytnim obciążeniem dla osób piszących kompilatory, gdyż dany wymóg mógłby być bardzo trudny do zrealizowania na konkretnej architekturze. Dla przykładu, gdyby standard wymagał, że typ unsigned char ma dokładnie 8 bitów to napisanie kompilatora dla architektury, na której bajt ma 9 bitów byłoby cokolwiek kłopotliwe, a z pewnością wynikowy program działałby o wiele wolniej niżby to było możliwe. Z tego właśnie powodu, niektóre aspekty języka nie są określone bezpośrednio w standar- dzie i są pozostawione do decyzji zespołu (osoby) piszącego konkretną implementację. W ten sposób, nie ma żadnych przeciwwskazań (ze strony standardu), aby na architekturze, gdzie bajty mają 9 bitów, typ char również miał tyle bitów. Dokonany wybór musi być jednak opisany w dokumentacji kompilatora, tak żeby osoba pisząca program w C mogła sprawdzić jak dana konstrukcja zadziała. Należy zatem pamiętać, że poleganie na jakimś konkretnym działaniu programu w przy- padkach zachowania zależnego od implementacji drastycznie zmniejsza przenośność kodu źró- dłowego. Zachowania niezdefiniowane są o wiele groźniejsze, gdyż zaistnienie takowego może spo- ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz