Frage

ich "#include <stdlib.h>" an der Spitze der Quelle.

Beispiel Zusammenstellung:

/usr/bin/colorgcc -std=c99 -fgnu89-inline  -g -Wall -I/usr/include -I./ -I../ -I../../ -I../../../ -I../../../../    -O3 -o f8  f8.c
In file included from f8.c:7:
ctype-cmp.c: In function ‘randomized’:
ctype-cmp.c:48: warning: implicit declaration of function ‘random’
ctype-cmp.c: In function ‘main’:
ctype-cmp.c:153: warning: implicit declaration of function ‘srandom’
ais@xcalibur:t$ 

Wenn ich -std = c99 ausschalten, wird die Funktion isfinite () kann nicht gefunden werden. So will ich -std = c99 für diesen und anderen Gründen verwenden. Gibt es einen Trick, den ich bin fehlt?

War es hilfreich?

Lösung

man srandom sagt, dass die Funktion nicht Teil C99 aber ein Teil von POSIX.

Aktivieren _BSD_SOURCE oder _XOPEN_SOURCE >= 500 oder jeden anderen geeigneten Feature-Test-Makro, das den srandom / Random-Funktion (siehe man feature_test_macros und man srandom) erklärt.

Dieses hat gute Chancen, aber Sie müssen die Makros herauszufinden, die implizit dadurch zu / nicht definiert definiert werden durch die Manpages Lesen oben.

/usr/bin/colorgcc -std=c99 -D_XOPEN_SOURCE=600 -fgnu89-inline -g -Wall 
    -I/usr/include -I./ -I../ -I../../ -I../../../ -I../../../../ -O3 -o f8  f8.c

Andere Tipps

Ja, es ist ein Trick, den Sie fehlen. Sie -std=gnu99 statt -std=c99 verwenden

-std=c99 #defines __STRICT_ANSI__, die /usr/include/features.h interpretiert als "enable nichts außerhalb des C-Standard by default" (ohne es zu, Sie zumindest bekommen sowohl _SVID_SOURCE und _BSD_SOURCE). -std=gnu99, auf der anderen Seite bedeutet „C99 und GNU-Erweiterungen“ (der gcc Standard wird derzeit -std=gnu89, seine C89 äquivalent, weshalb man brauchte, um etwas zu geben, die neuen C99-Funktionen zu erhalten).

Als Alternative können Sie das Feature-Test-Makros ermöglichen (wie in @ litb Antwort erwähnt). Mit Blick auf /usr/include/stdlib.h in meinem System, erwartet er einen von __USE_SVID, __USE_XOPEN_EXTENDED oder __USE_BSD. /usr/include/features.h sagt mir, dass das Feature-Test-Makros, die diese ermöglichen würden, ist:

  • _SVID_SOURCE (ermöglicht __USE_SVID)
  • _BSD_SOURCE (ermöglicht __USE_BSD)
  • _XOPEN_SOURCE mit einem Wert von mindestens 500 (ermöglicht __USE_XOPEN_EXTENDED)
  • _XOPEN_SOURCE_EXTENDED (auch ermöglicht __USE_XOPEN_EXTENDED)
  • _GNU_SOURCE (ermöglicht alles, einschließlich der vier Feature-Test-Makros oben)

Für die neuen Programme, bei denen Sie nicht zu besorgt über mögliche Namenskollisionen mit neuen Funktionen von zukünftigen Standards, sowohl -std=gnu99 und -D_GNU_SOURCE ist eine gute Idee. Es ermöglicht Ihnen, alle neuen Standard-Features und GNU-Erweiterungen verwendet werden, die mit einer Art Rückfall (zum Beispiel autoconf-Stil Feature-Tests) kombiniert wird, gibt die größte Flexibilität.

Referenzen:

Ich habe Zufallszahl erstellt mit gcc in Codeblöcken unter Ubuntu 9.10 (mit Compiler-Optionen: -std=gnu99 -D_GNU_SOURCE) Also das für mich gearbeitet:

Dies ist mein Code, den ich hatte, spielte mit:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
enum computer {keyboard, CPU, screen, printer};
int main(void)
{
  enum computer comp;
  time_t casovac;
  comp = CPU;
  srand(&casovac);
  printf("%d", rand());
  return 0;
}

Dies war nur Idee, natürlich Sie es durch andere Wege erreichen kann ;-) [Zur Installation verwenden Codeblocks: sudo apt-get install build-essential und dann sudo apt-get install codeblocks]

Ich benutze rand () und srand (). BTW: Haben Sie vergessen, einen Header oder zwei? Zumindest die zweite Warnung sagt es mir.

Versuchen einschließlich der Datei math.h. (Nur in Erinnerung hatten wir Probleme immer mit Mathematik-Bibliothek und hatten tatsächlich Link zu zwingen, es mit -Im).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top