我有以下C代码:
#includeint 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);
所以这个定义显然没有在标题中找到.
我看到你正在使用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模式下被接受为扩展.