我有以下 C 代码:
#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() 的声明带入了范围。我检查了我的 ANSI 标准(C99 是我唯一的副本),它确认了 round() 函数存在于 math.h 标头中。我在这里缺少什么?
编辑: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);
所以显然在标题中找不到定义。
我发现你正在使用 gcc。
默认情况下,gcc 使用类似于 C89 的标准。您可能想“强制”它使用 C99 标准(它遵循的部分)
gcc -std=c99 -pedantic ...
引用自海湾合作委员会手册 http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Standards.html#Standards
默认情况下,GCC 提供了一些
C 语言的扩展
极少数情况下会与 C 发生冲突
标准。请参阅 C 的扩展
语言家族。使用 -std
上面列出的选项将禁用
这些扩展相互冲突
选择 C 标准版本。
您还可以选择扩展
明确的 C 语言版本
with -std=gnu89 (对于带有 GNU 的 C89
扩展名)或 -std=gnu99 (对于 C99
带有 GNU 扩展)。默认情况下,如果
没有 C 语言方言选项
给定,是 -std=gnu89;这将会改变
在未来的版本中改为 -std=gnu99
当 C99 支持完成时。一些
C99 的功能
标准被接受为扩展
C89 模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)