【发布时间】:2011-10-21 01:24:18
【问题描述】:
以下是情况。有一个完全用 C 编写的系统/软件。这个 C 程序产生一个新线程来启动某种用 C++ 编写的数据处理引擎。因此,我拥有的系统运行 2 个线程(主线程和数据处理引擎线程)。现在,我用 C 语言编写了一些函数,它接收 C 结构并将其传递给数据处理线程,以便 C++ 函数可以访问 C 结构。这样做时,我观察到 C 结构中某些字段(如 unsigned int)的值在 C++ 端访问时会发生变化,我不知道为什么。同时,如果我传递像 int 这样的原始数据类型,则值不会改变。如果有人可以向我解释为什么它会这样,那就太好了。以下是我编写的代码。 `
/* C++ Function */
void DataProcessor::HandleDataRecv(custom_struct* cs)
{
/*Accesses the fields in the structure cs - an unsigned int field. The value of
field here is different from the value when accessed through the C function below.
*/
}
/*C Function */
void forwardData(custom_struct* cs)
{
dataProcessor->HandleDataRecv(cs); //Here dataProcessor is a reference to the object
//of the C++ class.
}
` 此外,这两个函数都在不同的源文件中(一个带有 .c ext,另一个带有 .cc ext)
【问题讨论】:
-
您在哪个平台上运行您的代码?哪个编译器/链接器系列?
-
我在 linux 上运行我的代码并使用 gcc 编译 C 和 C++ 文件
-
另外,请出示相关代码。我怀疑这是
thiscall约定的问题,但这只是一种直觉。除非我看到代码,否则我无法验证。 -
unsigned int可能是原语,但包含unsigned int的结构肯定不是,这就是他区分的地方。我在这里的猜测是,它与 C 函数并不像他首先想到的那样可重入有关,但这只是猜测。正如其他人所说,没有看到代码,我们就在黑暗中刺伤。 -
所以你的意思是,你的 C++ 函数看到的结构与你的 C 函数不同,即使你可以保证结构是相同的?是否有可能其他线程正在修改调用之间的结构?