gpt4 book ai didi

c++ - 如何附加 C 和 C++ 模块?

转载 作者:太空狗 更新时间:2023-10-29 20:37:05 24 4
gpt4 key购买 nike

我有两个模块:

模块一:一个C程序,构造两个图。

模块 2:一个 C++ 程序,检查模块 1 生成的两个图的等价性。

我想将模块 1 的输出提供给模块 2。

Module2 仅使用结构体,与 module1 中使用的完全相同,唯一不同的是 module2 包含一些函数重载等。

传输图的一种方法是将它们写入文件并在模块 2 中重新读取和解析。

我的问题是:

是否有一种方法可以将在 Module1 中构造的结构实例直接携带到 Module2,而无需通过此文件进行读/写。

我想说的抽象例子:

// Module1: 

struct s1 {
int a;
};

void main (){
struct s1 s;
s.a = 10;
}

// Module2:
struct s1{
int a; // Note the same structure and variable name.
};

void print (struct s1 s){
cout << s.a;
}

void main (){
struct s1 s;
print (s);
}

问题重述:有没有一种技术可以将在 Module1 中创建的结构直接(仅通过主内存)提供给 Module2? 没有先写入文件然后重新读取

最佳答案

没有理由不能将这两个模块链接到一个程序中。要记住的主要事情是 C 函数声明(在 C 头文件 module1.h 中)需要标记为具有 C 语言链接到 C++ 编译器。

你可以使用 __cplusplus 守卫来做到这一点:

module1.h

#ifndef MODULE_1_H
#define MODULE_1_H

// tell the C++ compiler this header is for
// a module written in C
#ifdef __cplusplus
extern "C" {
#endif

typedef struct
{
int i;
double d;
} Graph;

Graph construct_a_graph();

#ifdef __cplusplus
} // extern "C"
#endif

#endif // MODULE_1_H

module1.c

#include "module1.h"

Graph construct_a_graph()
{
Graph g;
g.i = 2;
g.d = 7.9;

return g;
}

module2.h

#ifndef MODULE_2_H
#define MODULE_2_H

#include "module1.h"

void process_graph(Graph g);

#endif // MODULE_2_H

module2.cpp

#include "module2.h"

void process_graph(Graph g)
{
// do stuff in C++
}

main.cpp

#include "module1.h"
#include "module2.h"

int main()
{
Graph g = construct_a_graph(); // C function

process_graph(g); // C++ function
}

使用 GCC 编译:

gcc -c -o module1.o module1.c // C module
g++ -c -o module2.o module2.cpp // C++ module
g++ -o main main.cpp module1.o module2.o // link fine

关于c++ - 如何附加 C 和 C++ 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com