Ralf Corsepius wrote:
On Don, 2001-09-06 at 10:45, Sven Schiwek wrote:
Hallo Liste! Ich habe möchte die Funktion "strnlen" aus dem Headerfile "string.h" benutzen und laut man-Page habe ich alles richtig gemacht. Also bsp.
#include
int main(){ cout << strnlen("SuSE-Hilfe", 5); return } Mein Compiler (gpp) bricht beim Compilieren jedoch mit 'strnlen' undeclared first use this function ... ab.
aus man strnlen:
CONFORMING TO This function is a GNU extension.
Aus /usr/include/string.h:
#ifdef __USE_GNU [..] extern size_t strnlen (__const char *__string, size_t __maxlen) __THROW __attribute_pure__; #endif
Aus /usr/include/features.h
/* These are defined by the user (or the compiler) to specify the desired environment:
__STRICT_ANSI__ ISO Standard C. _ISOC99_SOURCE Extensions to ISO C89 from ISO C99. _POSIX_SOURCE IEEE Std 1003.1. _POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2; if >=199309L, add IEEE Std 1003.1b-1993; if >=199506L, add IEEE Std 1003.1c-1995 _XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if Single Unix conformance is wanted, to 600 for the upcoming sixth revision. _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions. _LARGEFILE_SOURCE Some more functions for correct standard I/O. _LARGEFILE64_SOURCE Additional functionality from LFS for large files. _FILE_OFFSET_BITS=N Select default filesystem interface. _BSD_SOURCE ISO C, POSIX, and 4.3BSD things. _SVID_SOURCE ISO C, POSIX, and SVID things. _GNU_SOURCE All of the above, plus GNU extensions. _REENTRANT Select additionally reentrant object. _THREAD_SAFE Same as _REENTRANT, often used by other systems.
=> -D_GNU_SOURCE wird benötigt.
Ich habe sogar schon im header-file selbst nachgeschaut und die Funktion wird dort deklariert! Weiß jemand woran das liegen könnte?
Brille vergessen ? ;)
Aber im Ernst, Du hättest dem __GNU_SOURCE nachgehen müssen, dann wärst Du auf features.h gestossen (Muss man kennen, wenn man mit gcc arbeitet und/oder sich mit portabler Programmierung auseinandersetzen will (Fast alle Betriebssysteme und Compiler besitzen derartige Header).
Richtig(er) wäre:
# cat help.cc
#include
#include int main(){ cout << strnlen("SuSE-Hilfe", 5); return 0; } # g++ -Wall -D_GNU_SOURCE -o help help.cc
Ralf
Danke, das wars!!! Sven PS: Das strnlen eine C-Funktion ist weiß ich und diese mit cout zu benutzen ist natürlich nicht die feine Englische. Ich wollte einfach nur wissen warum das nicht funktioniert hat. -- _______Sven Schiwek_________________________________________________ | e-mail: sven.schiwek@gmx.net | www: http://sven-s.purespace.de | | sven.schiwek@web.de | http://www.azubi.ais-ag.de | |________________________Have a lot of Fun___________________________|