keil C和C++混合编程中implicit declaration of function警告问题的解决方案

使用c和C++混合编程中,除了要注意这些以外:

在混合编译时,需要注意以下几点:

1、C文件扩展名必须为.C, C++文件扩展名必须为.CPP, 头文件扩展名必须为.h。 如果源文件的扩展名使用错误,会导致编译出错。

2、C语言的头文件,需要加上如下条件编译及限制代码:

#ifdef  __cplusplus

    extern "C" {

#endif

//原本的头文件内容。

#ifdef  __cplusplus

#endif

其功能为,当使用c++编译器编译时,会添加extern "C" {}限制。 这样才可以使C语言的函数声明被C++正确识别。

3、所有C++文件中需要被C调用的函数,在定义和声明时都需要加上

extern "C"

可以是单独的函数,比如

extern "C" void func_cpp_for_c(void)

{

    //...

}

也可以是程序段,比如

extern "C"{

    void func1()

    {

    }

    void func2()

    {

    }

}

会遇到warning:#223-D:function “xxxxxxx” declared implicitly 这种警告,虽然不影响程序运行,但是看着还是很烦人的。在工程中,因为c的部分要调用C++写的函数,如果直接包含头文件(许多论坛文章给出了这种方法,但是我觉得应该是限于一种语言环境),就会报错,因为c和C++的编译方式确实有所差别。这种警告发生的原因是:

1  没有把函数所在的c文件生成.o目标文件
2  在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明
     在头文件中定义的数据只能被其他文件包含一次,但是函数可以被其他函数重复包含多次;因此,一般情况下把数据和函数分别定义在不同的头文件中;如果定义在同一个头文件中,那么在重复包含函数的文件中使用extern function来包含相关函数。

解决方案是在使用的函数的文件中,使用extern function声明来消除警告。如一个函数定义在cpp中,但是要c文件要调用,就在c文件的前面声明这个函数,这样就可以消除警告了。

产生这个警告的原因本质是编程的时候,代码堆叠造成,没有一开始完善的设计,c和c++分别进行了增量开发,所以会有类似这种不兼容的问题。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值