2011-08-08 35 views
0

こんにちは私はLinuxの下でstdlibでプログラミングしています。警告:fopen()コール

gccは次のコード行に対して次のような警告を出します。それはなぜですか?

FILE *fd; 
if (fd = fopen(filename, "rw")== NULL) 
{ 

と警告がある:

warning: assignment makes pointer from integer without a cast. 

は、この現象が発生することができますどのように、STDLIBのマニュアルに従ってのfopenの戻り値の型は* FILEです。それではまだ警告があるのはなぜですか? Advance--

--Thanks

答えて

6

if ((fd = fopen(filename, "rw")) == NULL) 
    ^      ^

を試してみてくださいそれ以外の場合fdは値0または1を取るとfopenによって返さFILE *自体は失われます。そのかっこがなければ、比較結果はFILE *の代わりにfdに格納されます。

+0

==は=より優先度が高いことに注意してください。それが最初に実行される方法です。 – taskinoor

+0

@taskinoorご清聴ありがとうございます。 – cnicutar

1

fdを基本的にfopen(filename, "rw") == NULLに設定しています。条件式が整数(0または1)であるため、整数からポインタを割り当てているためです。フォートワース修正

0
FILE *fd; 
if ((fd = fopen(filename, "rw"))== NULL) 
{ 

ためcnicutarの答え@従うだけで、それはあなただけ(置くことを忘れ ....動作します。このコードをコピー) "FD =ののfopen(ファイル名、 "RW")を" arroundの