Uso de "C" externa

contenido

Introducción

1. El programa C++ llama a la biblioteca C

2. El programa C llama a la biblioteca C++


Introducción

  A veces, en un proyecto C++, puede ser necesario compilar algunas funciones de acuerdo con el estilo C, agregando extern "C" antes de la función, lo que significa decirle al compilador que compile la función de acuerdo con las reglas del lenguaje C. Por ejemplo: tcmalloc es un proyecto implementado por Google en C++, proporciona dos interfaces, tcmallc() y tcfree, para su uso, pero si es un proyecto en C, no se puede usar, por lo que usa extern "C" para resolverlo. .

1. El programa C++ llama a la biblioteca C

Aquí tomamos el DO de una pila como ejemplo: LeetCode.20 corchetes efectivos , estamos aquí para usar la pila de una biblioteca estática escrita en lenguaje C para llamar convenientemente

 1. Primero colocamos la función principal del tema y algunas funciones de la interfaz en el archivo de proyecto de C++ test.cpp

 Como se muestra abajo:

2. Convertimos la pila en una biblioteca estática de C (para que podamos llamar directamente a las funciones internas en C++)

 ①Primero creamos un nuevo proyecto (el compilador utilizado aquí es VS2019), seleccionamos el asistente de escritorio de Windows (también puede elegir una biblioteca estática)

 ②Configurar un nuevo proyecto

 ③Seleccione biblioteca estática, proyecto vacío

 ④Copie la función de interfaz de la pila previamente escrita en lenguaje C en la biblioteca

 ⑤ Genere una biblioteca con el sufijo .lib

 3. Luego llame al archivo de encabezado de la biblioteca en test.cpp

 Donde "../" significa devolver el archivo de la capa anterior

#include "../Stack1/Stack.h"

Después de eso, se puede ver que se ha eliminado la advertencia roja del informe. Declarar el archivo de cabecera de esta manera, que es equivalente a decirle al compilador que existen estas funciones. Compilamos y enlazamos de nuevo y encontramos la "función externa no resuelta ". También necesitamos hacer alguna configuración para vincularlo.

 4. Luego configure las propiedades del proyecto C++

①Directorio de biblioteca adicional (archivo de depuración en Stack1)

Coloque la biblioteca Stack1.lib en la depuración en el directorio de la biblioteca adicional, es decir, copie la ruta de depuración en el Stack1 creado en el directorio de la biblioteca adicional

 ②Dependencias adicionales (vincule la biblioteca) Stack1.lib; agréguelo al frente, tenga en cuenta que el punto y coma no se puede perder

 5. Luego viene el uso de extern "C", agréguelo antes de test.cpp

extern "C"
{
#include"../Stack1/Stack.h"
}

Finalmente compilar y ejecutar

 ¡La llamada fue exitosa! !

2. El programa C llama a la biblioteca C++

 Cuando escribimos programas en C y necesitamos llamar a bibliotecas de C++, también necesitamos "C" externo

1. Coloque la función principal y la función de interfaz que se utilizará en el archivo test.c

 2. Convierta la pila en una biblioteca estática de C++ (el mismo proceso que el anterior)

 La misma compilación produce un archivo con el sufijo .lib

3. Propiedades de configuración, directorios de bibliotecas adicionales y dependencias adicionales (no se repite aquí)

Después de compilar y vincular, encontrará que no se puede volver a vincular

4. La "C" externa es útil

El "C" externo aquí es para hacer que la biblioteca estática de C ++ procese funciones con las reglas de modificación de nombres de funciones de C, de modo que el archivo C pueda reconocer estas funciones y llamarlas sin problemas. 

Podemos cambiarlo así, usando el método de compilación condicional , podemos hacer que la biblioteca C++ decore la función con las reglas de modificación del nombre de la función C, para generar .lib

#ifdef __cplusplus
extern "C"
{
#endif

	//初始化栈
	void StackInit(Stack* ps);

	//销毁栈
	void StackDestroy(Stack* ps);

	void StackPush(Stack* ps, STDataType x);

	void StackPop(Stack* ps);

	//当前栈的大小
	int StackSize(Stack* ps);

	//获取栈顶元素
	STDataType StackTop(Stack* ps);

	//栈是否为空
	bool StackEmpty(Stack* ps);

#ifdef __cplusplus
}
#endif 

Finalmente, compile, enlace y ejecute, y observe que el sufijo es test.c, lo que prueba que C llama a C++ con éxito. 

¡Ejecutar con éxito! ! !

Este es el uso de "C" externa, ¡gracias! !

Supongo que te gusta

Origin blog.csdn.net/weixin_57675461/article/details/121876001
Recomendado
Clasificación