ができないのはなぜでgccのrandom()インターフェース-std=c99です。

StackOverflow https://stackoverflow.com/questions/575350

  •  05-09-2019
  •  | 
  •  

質問

"#include <stdlib.h>" 最ます。

例集

/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$ 

私がoff-std=c99の機能isfinite()できません。思いを利用したい-std=c99こととします。あかねに欠?

役に立ちましたか?

解決

man srandomは、関数がのないのC99の一部が、POSIXの一部であることを述べています。

_BSD_SOURCE又は_XOPEN_SOURCE >= 500又はsrandom /ランダム関数(man feature_test_macrosman srandom参照)を宣言し、任意の他の適切な機能検査マクロを有効化。

この1は良いチャンスを持っていますが、あなたは上記のmanページを読むことによって、あまりにも、それによって暗黙的に定義されていない/定義されたマクロを把握する必要があります。

/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

他のヒント

あか抜けていて:利用できる -std=gnu99 の代わりに -std=c99.

-std=c99 #defines __STRICT_ANSI__, は、 /usr/include/features.h 解釈としての"機能は有効にしないでくださいもの以外はC標準のデフォルトで、"なしで、少なくとも両 _SVID_SOURCE_BSD_SOURCE). -std=gnu99, 一方、"C99プラスGNU拡張"(gccのデフォルトは現在 -std=gnu89, そのC89相当である理由に必要なものを指定し、C99の特).

ときのマクロ試験(記@litbの解答).見 /usr/include/stdlib.h 私のシステムであると期待していますの __USE_SVID, __USE_XOPEN_EXTENDED, や __USE_BSD. /usr/include/features.h からの機能試験用のマクロするようにこれらの:

  • _SVID_SOURCE することが __USE_SVID)
  • _BSD_SOURCE することが __USE_BSD)
  • _XOPEN_SOURCE の少なくとも 500 することが __USE_XOPEN_EXTENDED)
  • _XOPEN_SOURCE_EXTENDED (も可能 __USE_XOPEN_EXTENDED)
  • _GNU_SOURCE (を含む全ての機能試験用のマクロ)

新しいプログラムがないにも関心位名前の衝突による新規機能から将来のために使用され、両 -std=gnu99-D_GNU_SOURCE では良い方法がありました。で利用できるすべての新しい標準およびGNU拡張る何らかのフォールバック(例えば、 autoconf-スタイル機能試験)の柔軟性です。

参考文献:

私は(コンパイラオプションで:-std=gnu99 -D_GNU_SOURCE)のUbuntu 9.10の下でコードブロック内のgccを使用して乱数を作成しましたので、これは私のために働いてます:

これは私がプレイしていた私のコードです:

#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;
}

これはもちろん、あなたが[sudo apt-get install build-essential、その後sudo apt-get install codeblocksコードブロックを使用してインストールする]他の方法;-)でそれを達成することができ、唯一のアイデアでした

私は)(RAND()とsrand関数を使用します。ところで:あなたは、ヘッダーまたは2を忘れてしまいましたか?少なくとも第2の警告はそう私に語っています。

math.h.含む試してみてください(ただ、私たちは常に数学ライブラリの問題を持っていたし、実際に-lmでリンクそれを強制しなければならなかった覚えて)ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top