关闭

简单理解extern "C"

422人阅读 评论(0) 收藏 举报
分类:

    首先明确一点就是以.c为扩展名的源文件a.c(a代表文件名),vs按照C的编译方式进行编译;以.cpp为后缀的源文件a.cpp,按照C++的编译方式进行编译,而C++是面向对象的,支持函数重载,所以编译器对函数的处理和C有所不同。这个时候如果在另外一个源文件b.cpp中包含a.h时就会出现”无法解析的外部符号错误“,原因就是在b.cpp中a.h中的函数按照C++编译方式进行处理,在a.c中函数按照C的方式进行处理,所以找不到对应函数的定义(编译器处理后的函数名不同)。这时就需要extern ”C"对a.h进行包含,告诉编译器a.h中的函数按照C方式进行编译。

//a.h
void TestExternC();
//a.c
#include "a.h"
#include <stdio.h>
void TestExternC()
{
    printf("test\n");
}
//b.cpp
extern "C"
{
    #include "a.h"
}
int main()
{
    TestExternC();
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4392次
    • 积分:87
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    最新评论