C++知识点 13:extern“C”

yumo6666个月前 (07-01)技术文章48

13.1 在 CPP 文件中使用 extern “C”
show.h 文件 // show 函数声明
===============================

#pragma once
#include <stdio.h>
#include <stdlib.h>
void show();
****************************************************************************************

show.c 文件 // show 函数实现
===============================

#include "test.h"
void show()
{
printf("hello world\n");
}
****************************************************************************************
test.cpp 文件
===============================

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include "test.h"
// extern "C" void show(); // extern "C" 用途: 用来在 CPP 中调用 C 文件中函数
void test()
{
show();
}
int main()
{
test(); // 如果没有 extern "C" void show(); 会报错
system("pause");
return 0;
}
报错原因: C++ 存在函数重载机制,会修饰 show()函数名(比如有可能是 _Z4showv ),再去调用
因此在链接时候,在 test.c 文件中 只找到 show(),而不是_Z4showv,无法链接成功
解决:
在 test.cpp 文件 的全局范围内 加 一句话
extern "C" void show(); // 告诉编译器 show 函数 在别的文件中,而且是需要用 C 方式去链接


13.2 在头文件中使用 extern “C”
注意: 在 CPP 文件中使用 extern “C”, 有弊端
试想: 如果 .c 文件中使用了多个函数,则需要在.cpp 文件中使用多次 extern "C" ,非常麻烦
解决: 在 C 的头文件 .h 中使用 extern "C" ,一次性解决(一共 6 行)
例如:
将 13.1 中的 show.h 文件修改为
#if __cplusplus
extern "C"{
#endif
#pragma once
#include <stdio.h> 原 头文件 和 函数声明
#include <stdlib.h>
void show();
#ifdef __cplusplus
}
#endif


相关文章

C++ 与 C 的那些事儿:深度剖析两者区别

在编程的世界里,C++ 和 C 就像是一对有着紧密血缘关系却又各具特色的兄弟。对于很多初学者或者有一定编程经验的人来说,分清它们之间的差异至关重要。今天,我们就来深入探讨一下 C++ 和 C 的区别。...

C与C++ 的真正区别在哪里?

C和C++区别为:结构不同、设计不同、函数库不同。C语言:C语言结构只有成员变量,而没成员方法。C++:C++结构中可以有自己的成员变量和成员函数。一、结构不同1、C语言:C语言结构只有成员变量,而没...

C 语言和 C++ 有什么区别?老程序员居然这样理解,不怕你不懂

差不多是win98跟winXP的关系。C++是在C的基础上增加了新的理论,玩出了新的花样。所以叫C加加。C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入...

C++和C语言已经不是一种语言了,现代C++与C不一样了

C++和 C 完全不一样。学 C++前可以不用学 C,它和 C 的相似度都比不过 Java。在 C++11 之前,C++可以说是包含类的...

Java培训:C++和Java有什么区别?

  众所周知,C++和Java这两种编程语言都是面向对象的,但是这两种语言在几个方面有所不同。C++是C语言的衍生物,具有面向对象和过程编程语言的特征。基本上,C++是为应用程序和系统开发而设计的,而...

C/C++基础语法复习(一):C++与C语言的区别,主要有这些

和C的区别1.概念:C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。...