我需要在我的 C++ 代码中使用一些 C 定义的结构。下面是C头文件中的结构

#ifdef __cplusplus
extern "C" {
#endif

typedef struct TestParameters {
    long     p1;
    long     p2;
    long     p3;
} TestParameters_t;
#ifdef __cplusplus
}

下面的代码可以编译,但行为是否按照标准定义和有效以接收 C 实例作为引用并使用它?
TestParameters_t testParams;
test(testParams);

// Is it valid to receive a C struct instance as a reference in C++ code
void test(TestParameters_t &testParams)
{

}

最佳答案

是的,即使结构来自 C 头文件,您也可以像使用 C++ 头文件中定义的结构一样使用它。

使用其引用或地址传递结构比使用其值更好。

如果函数不会修改它,请不要忘记将其标记为 const

void test( const TestParameters_t &testParams)
{
  // Won't modify testParams;
}

或者
void test( TestParameters_t &testParams)
{
  // Will modify testParams;
}

关于c++ - 在 C++ 中引用 C 结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27547340/

10-10 21:15