当前位置:  开发笔记 > 编程语言 > 正文

为什么gcc报告"隐含的函数声明'轮''?

如何解决《为什么gcc报告"隐含的函数声明'轮''?》经验,为你挑选了1个好方法。

我有以下C代码:

#include 

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是我唯一的副本),它确认了math.h标题中存在round()函数.我在这里错过了什么?

编辑:编译器是Ubuntu上的GCC 4.3.2(intrepid,IIRC).运行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);

所以这个定义显然没有在标题中找到.



1> pmg..:

我看到你正在使用gcc.

默认情况下,gcc使用类似于C89的标准.你可能想"强迫"它使用C99标准(它符合的部分)

gcc -std=c99 -pedantic ...

引自GCC手册

默认情况下,GCC为C语言提供了一些扩展,在极少数情况下会与C标准冲突.请参阅C语言系列的扩展.使用上面列出的-std选项将禁用这些与所选C标准版本冲突的扩展.您也可以选择C语言明确的扩展版本与-std = gnu89(用于C89与GNU扩展)或-std = gnu99(对于C99和GNU扩展).如果没有给出C语言方言选项,则默认为-std = gnu89; 在C99支持完成后,在将来的某个版本中,这将更改为-std = gnu99.作为C99标准一部分的某些功能在C89模式下被接受为扩展.


还需要-lm链接libm以获取实际功能.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有