c和c++;与图书馆的联系 假设我有一个C++类库,使用类和模板。假设我还有一个自定义的C++头MyLink .h,下面是: #include "lib.h" //call methods from lib.h that use templates and classes // and return an integer based off of the information gained from calling functions lib.h extern "C" int foo(int param1, const int param2);

c和c++;与图书馆的联系 假设我有一个C++类库,使用类和模板。假设我还有一个自定义的C++头MyLink .h,下面是: #include "lib.h" //call methods from lib.h that use templates and classes // and return an integer based off of the information gained from calling functions lib.h extern "C" int foo(int param1, const int param2);,c++,c,extern,linkage,C++,C,Extern,Linkage,现在假设我在一个名为test.C的C文件中。按如下方式调用函数foo()合法吗 //in test.c int first = foo(5, 6); 另外,在编译的目标代码/链接器阶段发生了什么 谢谢 按如下方式调用函数foo()合法吗 //in test.c int first = foo(5, 6); 是的,这是合法的。尽管您应该阅读下面的内容,以确保此法律电话将链接 编译的目标代码/链接器阶段发生了什么 类的使用不会产生干扰。C++类将被编译成链接器将理解的对象代码。 编辑克里斯·多德

现在假设我在一个名为test.C的C文件中。按如下方式调用函数foo()合法吗

//in test.c
int first = foo(5, 6);
另外,在编译的目标代码/链接器阶段发生了什么

谢谢

按如下方式调用函数foo()合法吗

//in test.c
int first = foo(5, 6);
是的,这是合法的。尽管您应该阅读下面的内容,以确保此法律电话将链接

编译的目标代码/链接器阶段发生了什么

类的使用不会产生干扰。C++类将被编译成链接器将理解的对象代码。 编辑克里斯·多德的评论:


<>你的模板也将通过<代码> FoO 调用它们。

你可能想让你的“MyLink .h”能够从C和C++中编译,例如通过使用代码> > IFIFF,CPLUS PLUS < /C> >在单独的行上包装<代码>外“C”{<代码> > <代码> } /Cuth>。这样,
intfoo(intparam1,constintparam2)部分将对普通C代码可见,其余部分将对C++可见。如果没有这个,你的“测试C”需要一个单独的方式来声明函数。不是真的。如果<代码> Foo< /Co>使用任何模板,当编译C++源文件时,它们会被实例化,C++源文件定义了<代码> Foo。C++端可能有代码访问静态对象,使用异常处理,或者任何其他需要C++特定初始化代码的其他东西。