2012-11-21 4 views
6

Ich schreibe ein kleines C-Programm, in dem ich die isnumber() Funktion anrufe.Warum ist die Funktion isnumber() in bestimmten Distributionen von Unix vorhanden, aber nicht in anderen?

#include <ctype.h> 

char c 
if(isnumber(c)) 
    { foo } 

Dies kompiliert ohne ein Problem auf meinem Mac (OS X 10.8). Wenn ich es jedoch auf einen CentOS 6.x-Server hochlade, wird es nicht kompiliert. Darüber hinaus beschreibt the OS X man page for isdigit()isnumber(), aber die CentOS man Seite nicht. Es ist, als ob es einfach nicht auf der Linux-Box existiert. Sowohl the OS X man page for isdigit() als auch a general Unix man page für isdigit() haben isnumber() als Teil der C-Standardbibliothek libc, -lc aufgeführt. Wenn ich unter Linux die Kompilierungs-Flags -lc hinzufüge, wird es immer noch nicht kompiliert.

Warum ist diese Funktion in bestimmten Formularen unter Unix und nicht in anderen enthalten?

Antwort

11

isnumber() ist ein BSDism, wie sie in der Geschichte Abschnitt der verknüpften Manpage gesehen werden:

Die ISNUMBER() Funktion in 4.4BSD erschienen.

Und es OS X zeigt ihr Erbe ...

Auch gibt es einen STANDARDS Abschnitt, der über isdigit spricht aber stumm schaltet über isnumber.

Jedenfalls sollten Linux, BSD oder OS X Manpages nicht als maßgebend für die Sprache C oder gar den POSIX-Standard angesehen werden. Für C lesen Sie die C-Standardspezifikation (leicht zu finden), und für POSIX können Sie die OpenGroup web site lesen.

Verwandte Themen