C++调用C函数的方法

C++调用C函数的方法

我们以前见到extern "C"这样的语句,只是简单地知道跟外部链接有关,但是没有深刻理解它的意思。今天继续和一起学习C++调用C函数的方法吧!

C++调用C函数的`方法

首先,为什么要使用extern "C"修饰符?

C++调用其它语言的函数,由于编译器生成函数的机制不一样,所以需要经过特殊处理,才可以调用。调用C语言的函数,需要在函数声明的地方语句extern "C"。如果不使用该语句,在链接的时候,编译器就会报以下这种错误。

Test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl DeleteStack(struct _Node *)" (?DeleteStack@@YAXPAU_Node@@@Z),该符号在函数 _main 中被引用。

然后是如何使用?

应该怎么使用该语句呢?

刚开始,我简单地在C++源文件的前面使用该语句声明,但是还是出错,而且是在编译阶段就报错。

error C2732: 链接规范与“DeleteStack”的早期规范冲突。

为什么会出现这个错误呢?因为C++源文件已经引入了C的头文件,在头文件里,声明该函数时没有extern修饰,而这里有extern修饰,所以冲突了。解决的办法有两个。

一。在C头文件中加上extern修饰符。

直接加,也不行。因为C源文件也包含了这个头文件,当编译C源文件时,就会出现错误。所以,需要一种机制来区分是编译C还是C++文件。方法如下:

#ifdef __cplusplus

extern "C"

#endif

void DeleteStack(Stack stack);

因为在编译C++文件时,自动定义预处理器名字__cplusplus,而编译C时,没有该处理器名字。所以只有编译C++时,才有符号extern “C”。

此外,链接指示extern "C"有单个和复合两种形式。以上为单个形式,复合形式可以同时将几个函数声明为extern "C"

extern "C" {

void DeleteStack(Stack stack);

void PrintStack(Stack stack);

void Pop(Stack stack);

}

加上预处理器名字如下:

#ifdef __cplusplus

extern "C" {

#endif

void DeleteStack(Stack stack);

void PrintStack(Stack stack);

void Pop(Stack stack);

#ifdef __cplusplus

}

#endif

  二。编写一个C++风格的头文件,在这里添加extern修饰符。

使用方法一,很简单。但是如果该头文件是别人写好,你无法修改。这个时候就要使用其它方法了。方法是定义C++自己的头文件,文件名为"CStack.h"

// CStack.h

extern "C" {

#include "Stack.h";

}

C++调用C函数的方法

转载请注明出处我优求知网 » C++调用C函数的方法

学习

高考毕业生评语

阅读(31)

本文为您介绍高考毕业生评语,内容包括高考毕业生评语简短,高考评语50字以内。在日常学习、工作或生活中,大家都有写评语的经历,对评语很是熟悉吧,评语可以帮助被评价者不断地逼近理想目标,其实很多朋友都不太清楚什么样的评语才是好的评语,以

学习

学前教育专业介绍

阅读(32)

本文为您介绍学前教育专业介绍,内容包括学前教育专业介绍范文,学前教育专业介绍和规划。学前教育是幼师利用各种方法,有系统、有计划、科学地对孩童的大脑进行各种刺激,使其大脑各部位的功能逐渐完善而进行的教育。下面和一起来看学前教育

学习

就业前景比较好的工科专业排名

阅读(35)

本文为您介绍就业前景比较好的工科专业排名,内容包括女生工科最好就业的十大专业,就业前景最好的工科专业排名。高考结束后,应该选择什么样的专业可能是摆在每个学子面前最现实的问题了。选对专业,不仅能够对就业带来帮助,而且在未来发展过

学习

统考专升本考试一般考什么

阅读(29)

本文为您介绍统考专升本考试一般考什么,内容包括专升本语文零基础全国统考,专升本统考要考什么。专升本是高职高专学生进入本科学习选拔考试的简称,是中国教育体制中大专层次学生升入本科学校或者专业继续学习的考试制度。专升本有两大类

学习

中层管理者的基本素质

阅读(53)

中层管理人员在企业中起中流砥柱的作用,他们不同于一般员工,他们的素质高低,在很大程度上影响一般员工的职业行为。下面是分享的中层管理者的基本素质,一起来看一下吧。

学习

我在学习上的融会贯通作文(通用)

阅读(31)

在日常学习、工作抑或是生活中,大家总少不了接触作文吧,写作文是培养人们的观察力、联想力、想象力、思考力和记忆力的重要手段。那么,怎么去写作文呢?以下是整理的我在学习上的融会贯通作文,仅供参考,希望能够帮助到大家。

学习

重庆三峡学院怎么样

阅读(33)

本文为您介绍重庆三峡学院怎么样,内容包括重庆三峡学院怎么样好不好,重庆三峡学院怎么样知乎。重庆三峡学院创建于1956年,其前身为四川省万县初中师资训练班,先后更名为万县大学、万县专科学校、万县师范专科学校。以下是为大家整理的重庆

学习

学校教师工资方案(精选)

阅读(145)

本文为您介绍学校教师工资方案(精选),内容包括江西教师工资最新调整方案,学校教师工资标准表。为了确保事情或工作得以顺利进行,常常需要预先准备方案,方案属于计划类文书的一种。写方案需要注意哪些格式呢?下面是为大家整理的学校教师工资方

学习

国庆佳节欢乐聚的句子

阅读(32)

十月处金秋,国庆迎欢腾。国庆节,让我们放下心中的负担,消灭心中的依恋,迎接这个特殊的日子,同祖国共同庆祝这个盛宴,愿祖国繁荣强盛的同时,也祝你生活繁花似锦。国庆节快乐!

学习

重庆执业医师笔试考试时间

阅读(34)

本文为您介绍重庆执业医师笔试考试时间,内容包括重庆执业医师笔试,重庆2020执业医师考试时间。医师资格考试的性质是行业准入考试,是评价申请医师资格者是否具备从事医师工作所必须的专业知识与技能的考试。以下是帮大家整理的.重庆执业

学习

复读生高考需要学籍吗

阅读(30)

高考复读就是高考之后再读一年,通常是指应届考生不能如愿考上自己满意的学校,再复习一年功课重新参加高考。复读往往在高考补习班进行,也有学生根据具体情况在家复习。下面是整理的复读生高考需要学籍吗,欢迎大家分享。

学习

大学开学最新通知范文(精选)

阅读(90)

在当今社会生活中,我们都跟通知有着直接或间接的联系,通知是上级机关向下级机关传达指示、批转下级机关的公文、转发上级机关和不相隶属机关的公文,布置工作与周知事项时所用的一种下行公文。你知道通知怎样写才规范吗?下面是收集整理的大学

学习

关于清华大学自主招生自荐信范文

阅读(32)

本文为您介绍关于清华大学自主招生自荐信范文,内容包括清华大学自主招生自荐信范文800字,清华大学强基计划需要写自荐信吗。在眼下市场经济活跃,人们的进取心不断增强的社会,自荐信在现实生活中使用广泛,通过自荐信,我们可以达到自我推荐的

学习

2021年济南中考语文作文题目:为自己赋能

阅读(33)

本文为您介绍2021年济南中考语文作文题目:为自己赋能,内容包括2021济南中考作文为自己赋能例文,2021山东济南中考作文为自己赋能。在日常学习、工作或生活中,大家最不陌生的就是作文了吧,作文是一种言语活动,具有高度的综合性和创造性。你所