【发布时间】:2011-02-25 13:55:13
【问题描述】:
这个问题是由一些混合语言编程引起的。我有一个想从 C++ 代码调用的 Fortran 例程。 Fortran 通过引用传递其所有参数(除非您另有说明)。
所以我想我会在我的 C++ 代码中很聪明(从那里开始不好),并像这样定义 Fortran 例程:
extern "C" void FORTRAN_ROUTINE (unsigned & flag);
这段代码运行了一段时间,但是(当然是在我需要离开的时候)突然在回电时开始崩溃。清除调用堆栈的指示。
另一位工程师在我身后解决了这个问题,宣布例程必须在 C++ 中定义为
extern "C" void FORTRAN_ROUTINE (unsigned * flag);
我会接受,除了两件事。一个是编译器不通过引用传递 reference parameters 似乎相当违反直觉,而且我在任何地方都找不到说明这一点的文档。另一个是他同时更改了一大堆其他代码,所以理论上它可能是另一个解决问题的更改。
那么问题来了,C++究竟是如何传递引用参数的呢?是否可以免费为小值进行复制,复制或其他操作?换句话说,引用参数在混合语言编程中完全没用吗?我想知道,这样我就不会再犯同样的代码杀死错误了。
【问题讨论】:
-
通过验证阶段后,引用和指针是一回事:stackoverflow.com/questions/1640355/…
-
@CrazyJugglerDrummer:从我在那里读到的内容来看,答案实际上是“不是必需的,但对于今天的大多数编译器来说是的”。我什至会说这与我的问题相同,只是我添加了将有问题的例程定义为
extern "C"的问题。这可能会神奇地使它们相同吗?
标签: c++ parameter-passing