1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

implicit declaration of...

  • lmeyer
  • 16. März 2007 um 20:20
  • Unerledigt
  • lmeyer
    3
    lmeyer
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    9
    • 16. März 2007 um 20:20
    • #1

    Hallo!
    Mal wieder ein Problem bei dem ich nicht weiterkome und das wahrscheinlich gar kein richtiges ist :winking_face:

    compilermeldung:

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

    funktion:

    Code
    int tmpFile = -1;
        char *delimeter = "&";    
        char *p;
        char myPath[64];
        char command[120];
        FILE *tmp_fp;
    
    
        strcpy(myPath,"./querydecode_XXXXXX");
        tmpFile = mkstemp(myPath); /* zeile 39 */
        sprintf(command, "./uencode -d - %s", myPath);
        if( tmpFile == -1 ){
            return 1;    
        }
        tmp_fp = (FILE *) fdopen(tmpFile, "w"); /* zeile 44 */
    Alles anzeigen

    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 :winking_face: )

    Vielen Dank im Vorraus,
    Lukas

  • djmaecki
    8
    djmaecki
    Mitglied
    Reaktionen
    1
    Punkte
    616
    Beiträge
    119
    • 16. März 2007 um 20:43
    • #2

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

  • lmeyer
    3
    lmeyer
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    9
    • 17. März 2007 um 00:03
    • #3
    Zitat von djmaecki

    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 :winking_face:

    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 :winking_face: ) (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 :) )

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 17. März 2007 um 02:19
    • #4

    Sysprog-spezifische Fragen sind vielleicht im Sysprog-Forum besser aufgehoben :winking_face:
    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.

  • djmaecki
    8
    djmaecki
    Mitglied
    Reaktionen
    1
    Punkte
    616
    Beiträge
    119
    • 17. März 2007 um 06:49
    • #5

    Tja, wenn du keine -D parameter haben möchtest, gibts folgende Alternative:

    Code
    #define _POSIX_SOURCE
    #define _BSD_SOURCE

    Einfach _vor_ den #includes hinschreiben.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 18. März 2007 um 11:36
    • #6
    Zitat von lmeyer

    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*

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 18. März 2007 um 12:08
    • #7

    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!

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 18. März 2007 um 18:45
    • #8
    Zitat von hal

    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung