Kurs programowania w C cz. 152

Nasza ocena:

3
Wyświetleń: 511
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

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

Fragment notatki:

172 ROZDZIAŁ 24. PRZENOŚNOŚĆ PROGRAMÓW mie korzystamy z rozszerzenia naszego kompilatora. Rozważmy odwoływanie się do wartości wskazywanej przez wskaźnik o wartości NULL. Ponieważ według standardu operacja taka ma niezdefiniowany skutek to w szczególności może wywołać jakąś z góry określoną funkcję — kompilator może coś takiego zrealizować sprawdzając wartość wskaźnika przed każdą derefe- rencją, w ten sposób niezdefiniowane zachowanie dla konkretnego kompilatora stanie się jak najbardziej zdefiniowane. Sytuacją wziętą z życia są operatory przesunięć bitowych, gdy działają na liczbach ze znakiem. Konkretnie przesuwanie w lewo liczb jest dla wielu przypadków niezdefiniowane. Bardzo często jednak, w dokumentacji kompilatora działanie przesunięć bitowych jest do- kładnie opisane. Jest to o tyle interesujący fakt, iż wielu programistów nie zdaje sobie z niego sprawy i nieświadomie korzysta z rozszerzeń kompilatora. Istnieje jeszcze trzecia klasa zachowań. Zachowania nieokreślone (ang.  unspecified beha- viour  ). Są to sytuacje, gdy standard określa kilka możliwych sposobów w jaki dane wyrażenie może działać i pozostawia kompilatorowi decyzję co z tym dalej zrobić. Coś takiego nie musi być nigdzie opisane w dokumentacji i znowu poleganie na konkretnym zachowaniu jest błę- dem. Klasycznym przykładem może być kolejność obliczania argumentów wywołania funkcji. Rozmiar zmiennych Rozmiar poszczególnych typów danych (np. char, int czy long) jest różna na różnych plat- formach, gdyż nie jest definiowany w sztywny sposób, jak np. “long int zawsze powinien mieć 64 bity” (takie określenie wiązałoby się z wyżej opisanymi trudnościami), lecz w na zasadzie zależności typu “long powinien być nie krótszy niż int”, “short nie powinien być dłuższy od int”. Pierwsza standaryzacja języka C zakładała, że typ int będzie miał taki rozmiar, jak domyślna długość liczb całkowitych na danym komputerze, natomiast modyfikatory short oraz long zmieniały długość tego typu tylko wtedy, gdy dana maszyna obsługiwała typy o mniejszej lub większej  długości 1. Z tego powodu, nigdy nie zakładaj, że dany typ będzie miał określony rozmiar. Jeżeli potrzebujesz typu o konkretnym rozmiarze (a dokładnej konkretnej liczbie bitów wartości) możesz skorzystać z pliku nagłówkowego stdint.h wprowadzonego do języka przez standard ISO C z 1999 roku. Definiuje on typy int8 t, int16 t, int32 t, int64 t, uint8 t, uint16 t, uint32 t i uint64 t (o ile w danej architekturze występują typy o konkretnej liczbie bitów).

(…)

… typy o konkretnej liczbie bitów).
Jednak możemy posiadać implementację, która nie posiada tego pliku nagłówkowego. W
takiej sytuacji nie pozostaje nam nic innego jak tworzyć własny plik nagłówkowy, w którym
za pomocą słówka typedef sami zdefiniujemy potrzebne nam typy. Np.:
typedef
typedef
typedef
typedef
typedef
typedef
typedef
typedef
unsigned
signed
unsigned
signed
unsigned
signed
unsigned
signed…
... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz