稽20疯会 发表于 2019-6-3 17:55:20

关于#include预处理问题

我在写作业时遇到一个问题(偶然发现的)
在DEV C++中如果源代码后缀为.cpp在未包含math.h头文件时是不可以调用pow函数的
但是把后缀改成.c就不会存在这个问题,会有警告 incompatible implicit declaration of built-in function 'pow'
百度上我搜索过,搜到答案如下:
https://zhidao.baidu.com/question/310052611.html
(截图放不上来抱歉)
但是为什么不写#include <math.h>能不能调用会与文件后缀有关呢?
#include <stdio.h>
int main()
{
        unsigned long long sum=0,temp=1,weight,i;
        for(i=0;i<64;i++)
        {
                temp=pow(2,i);
                sum=sum+temp;
        }
        weight=sum/25000;
        printf("舍罕王应该给予达依尔%llu粒麦子\n如果每25000粒麦子为1kg,那么应该给%llu公斤麦子\n",sum,weight);
}

希望能获得各位老师的解答,万分感谢!

shake_a_tree@16 发表于 2019-6-3 17:58:05

这个跟编译器的处理有关系吧

稽20疯会 发表于 2019-6-3 18:00:07

shake_a_tree@16 发表于 2019-6-3 17:58
这个跟编译器的处理有关系吧

emmmmm可是我用的都是DEV呀,我从知道可以不包含的时候就一直不写那一行代码,今天保存的时候忘记改后缀了才无法编译发现这个问题

Krant5 发表于 2019-6-3 18:00:17

因为gcc 与g++是两个程序,对应.c和.cpp,处理上可能略微不同,math.h是C库中的,cpp中应该是#include <cmath> 这个和你写代码影响不大的

shake_a_tree@16 发表于 2019-6-3 18:02:16

稽20疯会 发表于 2019-6-3 18:00
emmmmm可是我用的都是DEV呀,我从知道可以不包含的时候就一直不写那一行代码,今天保存的时候忘记改后缀 ...

同一个编译器对不同文件的处理不一样啊。CPP文件虽然兼容C文件哎,但两者毕竟是不一样的。

稽20疯会 发表于 2019-6-3 18:03:25

Krant5 发表于 2019-6-3 18:00
因为gcc 与g++是两个程序,对应.c和.cpp,处理上可能略微不同,math.h是C库中的,cpp中应该是#include这个 ...

我把后缀改成.cpp后加上#include<math.h>后也可以正常编译执行,请问这是编译器自动纠错码

稽20疯会 发表于 2019-6-3 18:05:53

shake_a_tree@16 发表于 2019-6-3 18:02
同一个编译器对不同文件的处理不一样啊。CPP文件虽然兼容C文件哎,但两者毕竟是不一样的。

好的,非常感谢您
页: [1]
查看完整版本: 关于#include预处理问题