ができないのはなぜでgccのrandom()インターフェース-std=c99です。
質問
い "#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_macros
とman 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
#define
s __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でリンクそれを強制しなければならなかった覚えて)ます。