Article View: pl.comp.lang.c
Article #291Re: Uwaga: blad w funkcji isdigit .
From: Karol Wojtiuk
Date: Fri, 14 Nov 1997 10:25
Date: Fri, 14 Nov 1997 10:25
51 lines
2616 bytes
2616 bytes
Marek Kotowski wrote in message <346C146D.4F69@imm.org.pl>...
>Karol Wojtiuk wrote:
>
>> funkcja isdigit jest zadeklarowana następująco:
>> int isdigit(int c);
>[...]
>> po pierwsze należało sporządzić inną deklarację funkcji (parametr typu
int
>> mówi wyraźnie,
>> że możemy używać wartości parametru w o wiele większym zakresie niż tylko
od
>> 0 do 256) i
>> po drugie można było zaznaczyć w opisie funkcji, że akceptuje ona tylko
>> wartości od 0 do 256.
>> Co o tym sądzicie?
>
> Zgodnie z "Rationale" funkcja (makro) isdigit oraz inne standardowe
>funkcje
>zadeklarowane w ctype.h maja jako argument int po to, by oprocz malych
>wartosci znakowych (unsigned char) moc obsluzyc takze znak EOF, ktory
>tradycyjnie ma wartosc -1 lub inna ujemna. Z tej samej przyczyny takie
>funkcje jak getchar zwracaja nie char ale int. Zatem bledu w isdigit nie
>ma.
>
> Marek Kotowski
Blad w isdigit jest poniewaz w opisie tej funkcji jak i w header'ach
bibliotek nie jest zaznaczone, ze mozna operowac tylko na wartosciach od -1
do 255, a deklaracja funkcji mowi jasno o dopuszczalnosci argumentu z
zakresu int. Dodatkowo trzeba zaznaczyc, ze powoduje to trudno wykrywalny
blad jezeli operuje sie na wartosciach signed char (po prostu nie
przypuszczasz ze wywali ci program na znaku funta angielskiego). Dodatkowo
jako dowod moze tu posluzyc koncowka implementacji tablicy _ctype z pliku
ctype.c:
...
_PUNCT, /* 7E ~ */
_CONTROL, /* 7F (DEL) */
/* and the rest are 0... */
};
Chodzi mi o zdanie "and the rest are 0", ktore jest nieprawda.
Na koniec warto dodac, ze to wszystko dotyczy tylko funkcji bibliotecznych
Microsoft.
Slon przyslal mi opis tych funkcji w UNIX SVR4 gdzie jasno jest opisane, ze
operuja one
tylko i wylacznie na 7-mio bitowym kodzie ASCII, czego u Microsofta prozno
szukac.
Pozdrowienia
Karol Wojtiuk
Technical Details
Message-ID:
<64h90j$sf7$1@sunsite.icm.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.icm.edu.pl!not-for-mailReferences:
<64flfj$jds$1@sunsite.icm.edu.pl> <346C146D.4F69@imm.org.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.icm.edu.pl!not-for-mail From: "Karol Wojtiuk" <karol@tebo.chelm.pl> Newsgroups: pl.comp.lang.c Subject: Re: Uwaga: blad w funkcji isdigit . Date: Fri, 14 Nov 1997 11:25:46 +0100 Organization: ICM Lines: 54 Message-ID: <64h90j$sf7$1@sunsite.icm.edu.pl> References: <64flfj$jds$1@sunsite.icm.edu.pl> <346C146D.4F69@imm.org.pl> NNTP-Posting-Host: guru.tebo.chelm.pl X-Newsreader: Microsoft Outlook Express 4.71.1712.3 X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit