私は、次のCコードを持っている:なぜgccは「ラウンド関数」の暗黙の宣言を報告しますか?
#include <math.h>
int main(int argc, char ** argv)
{
double mydouble = 100.0;
double whatever = round(mydouble);
return (int) whatever;
}
私はこれをコンパイルすると、私は警告を取得:
round_test.c: In function ‘main’:
round_test.c:6: warning: implicit declaration of function ‘round’
round_test.c:6: warning: incompatible implicit declaration of built-in function ‘round’
私はCとさびたんだけど、私はの#includeが宣言を持っていると考えをround()をスコープに追加します。私はround()関数がmath.hヘッダーに存在することを確認する私のANSI標準(C99は私が持っている唯一のコピーです)をチェックしました。私はここで何が欠けていますか?
編集:コンパイラはUbuntu(intrepid、IIRC)のGCC 4.3.2です。 gcc -Eを実行すると次のようになります。
$ gcc -E round_test.c | grep round
# 1 "round_test.c"
# 1 "round_test.c"
# 2 "round_test.c" 2
double whatever = round(mydouble);
したがって、定義が明らかにヘッダーに見つかりません。
ありがとうございます、-std = c99はそれを解決するようです。私はround()がC99の追加であることを認識していませんでした(もちろん、私の参考文献はすべてC99であり、これを無視しています)。 –
(驚いています)本当にC99を追加しましたか? –
そうです、C89は 'round()'関数を記述しませんでした(もちろん、コンパイラはそれを拡張子として提供することができます)。 – pmg