|
|
1
7
它是 可能的 对于编译器来说,对于C和C++代码使用不同的调用约定;然而,在实践中,几乎从不发生这种情况。
如果您只想让它工作,而不关心支持晦涩的编译器,那么不要费心
如果您想要完全学究,或者需要支持学究编译器,请编写一个包装器:
|
|
2
1
链接错误。 C++执行名为Mungle的操作,它生成具有类型信息的链接时间函数名。
外C转那个
编辑: 如果所有的东西都是由C++编译器编译的,那就不是问题了。但是如果你有一个由C编译器编译的对象文件和一个由C++编译器编译的对象文件,那么你将有一些问题。 我似乎还记得需要外部“C”规范的DLL,但此时内存可能已经使用了10年。 可以。 我创建了一个带有签名的函数的测试用例
并根据3个不同的GCC调用进行编译-
这两个调用产生 程序集中的不同标识符 . C++在其通常的类型修改方法中已经损坏了名称。(当然,编译器可能会做不同的事情)
然后,我包裹起来
然后 删除已损坏的C++名称 ,留下一个普通的C未组合的名称。 虽然这里还涉及到其他一些微妙的方面,例如,推到堆栈上的参数的顺序,但我将基于数据的这一点作为我的论据。 |
|
|
3
0
如果没有extern“c”,您的函数名将被编译器破坏,因此函数名最终可能与您期望的不同。您需要使用其损坏的名称(如在Windows中使用GetProcAddress)调用函数,否则将出现链接器错误。不同的编译器以不同的方式损坏它,所以最好继续使用extern关键字。 |
|
|
4
0
您可以使用这个:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |