implicit declaration of...

  • Hallo!
    Mal wieder ein Problem bei dem ich nicht weiterkome und das wahrscheinlich gar kein richtiges ist ;)

    compilermeldung:

    Code
    querydecode.c:39: warning: implicit declaration of function ‘mkstemp’
    querydecode.c:44: warning: implicit declaration of function ‘fdopen’

    funktion:

    und diese header habe ich:

    C
    #include <stdio.h> /* für fopen (zeile 39) */
    #include <stdlib.h> /* für mkstemp (zeile 44) */
    #include <string.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>

    compiliert wird mit "gcc -ansi -pedantic -Wall -g -c querydecode.c" (gcc (GCC) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5) <-- falls das denn was bringt ;) )

    Vielen Dank im Vorraus,
    Lukas

  • Mittels
    gcc -ansi -pedantic -Wall -g -D_POSIX_SOURCE -D_BSD_SOURCE
    bekommst du die warnings weg. Erklärung in /usr/include/features.h

    schön, die bekomme ich aber auch weg wenn ich die ganzen parameter weglasse ;)

    Ich muss für Sysprog mit denen kompilieren:

    Zitat

    Das Programm muss mit gcc -ansi -pedantic -Wall -g -c filename.c ohne Warnings und Info-Meldungen compiliert werden können (siehe Buch S. 182!). Sehen Sie keine Möglichkeit, eine Compilerwarnung zu entfernen, so fragen Sie einen Betreuer.

    Ich weiß nur nicht warum die warnings entstehen (und ich komme leider selten zu betreuten Zeiten in die Uni - darum frage ich hier nach ;) ) (und so unglaublich es klingt, ich habe es vor recht genau 30h geschafft ubuntu zu installieren (das schwere daran war das netzwerk einzustellen (und vorher endlich mal eine cd zu brennen die ohne schreibfehler fertig wurde) und vor 48h m#angefangen mich mit c herum zu ärgern - und was im Buch nicht deppensicher drinnen steht (wie eben warum ich warnings bekomme obwohl ich doch die header habe) muss ich anderenorts erfahren :) )

  • Sysprog-spezifische Fragen sind vielleicht im Sysprog-Forum besser aufgehoben ;)
    Die Option -D_POSIX_SOURCE (oder auch -D_XOPEN_SOURCE) ist auch für Sysprog zulässig; wichtiger ist in diesem Fall, ohne Warnings zu kompilieren.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • Ich weiß nur nicht warum die warnings entstehen


    Der Vollständigkeit halber: Das ist, weil du mit -ansi verlangst, daß dein Programm als ISO (a.k.a. ANSI) C kompiliert wird, aber diese zwei Funktionen sind nicht Teil dieses Standards, und die Header wissen das und verstecken die Deklarationen vor dir. Außer eben du definierst sowas wie _POSIX_SOURCE, damit sind sie wieder erlaubt.

    *plantsch*

  • Ich versteh nicht ganz, was die C-Variante mit den verfügbaren Funktionen zu tun hat... (abgesehen von dem minimum, der in ANSI festgelegt ist. Oder steht da drin, "du sollst keine Funktionen neben ANSI haben"?)

    Wie auch immer, pass auf dass du dich da nicht auf Sachen verlässt, die am Zielsystem nicht zur Verfügung stehen! Ich hab damals wie ich Sysprog gemacht hab das daheim am Mac entwickelt, wos eine nette Funktion namens fgetln ("get a line from a stream") gibt. Wie ichs dann am Zielrechner ausprobiert hab, gabs plötzlich die Fehlermeldung, dass er die Funktion nicht kennt. Ich hab rausgefunden, dass es die nur unter BSD-basierten OS gibt, und war damit angeschmiert.
    Ich hab die Funktion dann from scratch nachprogrammiert, was mir Minuspunkte bei der Abgabe eingebracht hat, weil ich zu kompliziert vorgegangen bin.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Ich versteh nicht ganz, was die C-Variante mit den verfügbaren Funktionen zu tun hat... (abgesehen von dem minimum, der in ANSI festgelegt ist. Oder steht da drin, "du sollst keine Funktionen neben ANSI haben"?)

    "-ansi -pedantic" soll dich ja davor bewahren Nicht-ANSI-Code zu schreiben. Im Standard ist eine Anzahl von Funktionen vorgegeben, die vorhanden sein müssen, alles andere ist möglicherweise nicht portabel, und daher konsequenterweie versteckt. Mit den oben angegebenen Definitionen gibt der Programmierer an, zu Standard XY kompatibel sein zu wollen, wo es gewisse Funktionen eben doch gibt.

    Zitat

    The macro `__STRICT_ANSI__' is predefined when the `-ansi' option is used. Some header files may notice this macro and refrain from declaring certain functions or defining certain macros that the ISO standard doesn't call for; this is to avoid interfering with any programs that might use these names for other things.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!