i
6 STRUKTURY
Prawie wszystko, co wiąże się z polami bitowymi, zależy od implementacji. To, czy pole może przekraczać granice słowa jest zależne od implementacji. Pola nie muszą mieć nazw; nie nazwane pola (tylko dwukropek i rozmiar) są używane do zapychania dziur (nie wykorzystanych bitów między polami). Specjalny rozmiar 0 służy do wymuszenia przesunięcia kolejnych pól w granice następnego słowa.
W pewnych maszynach bity pola umieszcza się w słowie od lewej strony do prawej, w innych zaś od prawej do lewej. Pola są więc całkiem użyteczne przy obsłudze danych zdefiniowanych lokalnie. Dla danych pochodzących z zewnątrz należy natomiast starannie zbadać, który koniec pola pojawia się jako pierwszy; programy zależące od takich rzeczy nie są przenośne. Pola można deklarować jedynie z typem int; ze względu na przenośność oprogramowania należy je jawnie kwalifikować jako signed lub unsigned. Pola nie są tablicami i nie mają adresów, zatem nie można stosować do nich operatora adresu &.
Mechanizmy wejścia i wyjścia nie są częścią samego języka C, więc aż do tej pory nie omawialiśmy ich zbyt dokładnie. Niemniej jednak sposoby komunikowania się programów ze swoim otoczeniem są znacznie bardziej skomplikowane od dotychczas prezentowanych. W tym rozdziale przedstawimy bibliotekę standardową, czyli zestaw funkcji realizujących operacje wejścia-wyjścia, obsługę tekstów, zarządzanie pamięcią, operacje numeryczne i wiele, wiele innych usług przydatnych w programach w języku C. Skoncentrujemy się jednak na obsłudze wejścia i wyjścia.
Funkcje biblioteczne są w standardzie ANSI na tyle szczegółowo zdefiniowane, że mogą występować w zgodnej formie we wszystkich systemach, w których istnieje C. Dzięki temu programy, w których komunikacja z systemem ogranicza się do udogodnień dostarczanych przez bibliotekę standardową, mogą być przenoszone z jednego systemu do innego bez zmian.
Właściwości funkcji bibliotecznych opisano w więcej niż tuzinie nagłówków; widzieliśmy już kilka z nich, w tym <stdio.h>, <string.h> i <ctype.h>. Nie pokażemy tutaj całej biblioteki, gdyż bardziej interesuje nas pisanie takich programów w języku C, które z niej korzystają. Biblioteka jest szczegółowo opisana w dodatku B.
Jak powiedzieliśmy w rozdz. 1, w bibliotece standardowej zaimplementowano prosty model znakowego wejścia i wyjścia. W tym modelu strumień znaków składa się z ciągu wierszy; każdy wiersz jest zakończony znakiem nowego wiersza. Jeśli system ope-racyjny pracuje w inny sposób, to do biblioteki należy zrobienie wszystkiego, co jest konieczne, by z punktu widzenia programu system pracował zgodnie z tym modelem. Na przykład funkcje biblioteczne mogą zamieniać wejściową parę znaków powrotu karetki i zmiany wiersza na znak nowego wiersza oraz wyjściowy znak nowego wiersza z powrotem na taką parę znaków.
203