アプリ版:「スタンプのみでお礼する」機能のリリースについて

Cygwinのgccで-std=c99オプションを付けて
以下のコードをコンパイルしようとしています。

#include <stdlib.h>
#include <math.h>

int main() {

isnormal(0.123);
strtold("0.123", NULL);

return 0 ;
}

$> gcc -std=c99 test_strtold.c

ですが、コンパイルできず、2つの関数とも'undefined reference'になります。
-std=c99を付けてコンパイルする方法または
この記述と同等の別の記述がありましたらご教授願います。
よろしくお願いいたします。

A 回答 (4件)

#2です。



先ほどは、-std=gnu99 -mno-cygwinと書きましたが、-std=c99 -mno-cygwinでもコンパイルできます。
ただし、別の問題が発生する可能性大です。

というのは、-mno-cygwinを指定するとMinGWとしてコンパイルすることになるのですが、このprintf系関数(scanf系も)でlong double型を使うことができません。

厳密なエラーチェックができなくなりますが、strtoldの代わりにsscanfを使えば、-mno-cygwinなしでもコンパイルできますので、総合的に考えるとその方がよいかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
std=c99でstrtoldの代わりにsscanfを使うことにします。
isnormalは、何かほかの方法を探してみることにします。

お礼日時:2009/02/25 12:54

http://www.gnu.org/software/hello/manual/gnulib/ …
によると、strtold()についてはCygwinはmissing、つまり「未対応」ってことのようです。
isnormal()の方も、おそらく「C99に対応しているisnormal()」がないのではないでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
では、残念ですが、違う記述もしくは、
-std=gnu99 -mno-cygwin
で対応しようと思います。

お礼日時:2009/02/25 12:00

CygwinのライブラリはC99に完全対応しているわけではありません。


-std=c99の代わりに-std=gnu99 -mno-cygwinを指定すればおそらく解決すると思います。
    • good
    • 0

-std=c99をつけた場合「だけ」起こる現象ですか?


状況的には↓に見えるんですが。
http://d.hatena.ne.jp/mickey24/20081008/1223463875

この回答への補足

-std=c99を付けなければ、
$> gcc test_strtold.c
エラーは
undefined reference to `_strtold'
のみです。
-std=c99を付ければ、
undefined reference to `_isnormal'
undefined reference to `_strtold'
とふたつともです。
また、-lmをつけても結果は同じです。
ちなみに、
Red Hat Enterprise Linux ES release 4 の gcc v3.4.6 では、
$> gcc -std=c99 test_strtold.c
でコンパイルは通り、
Ubuntu 7.10 の gcc v4.1.3 では、
gcc -std=c99 -lm test_strtold.c
でコンパイルは通りました。
cygwinでのgccのバージョンは、3.4.4です。

補足日時:2009/02/25 11:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!