在C代码中使用C定义的结构

我正在尝试在我的C代码中使用C源代码.当我尝试在C-header中声明的C代码结构中实例化然后通过值将其传递给C函数时,我遇到了一些困难.例:

dummyc.h:

#ifndef _DUMMY_C_H_
#define _DUMMY_C_H_

typedef struct {
    int a;
    int b;
    int c;
    int d;
}DUMMYS;

int dummyFunction(unsigned int a, unsigned int b, unsigned short c, DUMMYS dummy);

#endif

dummyc.c:

#include "dummyc.h"

int dummyFunction(unsigned int a, unsigned int b, unsigned short c, DUMMYS dummy){
    return 1;
}

dummycpp.cpp:

extern "C"{
    #include "dummyc.h"
}

int main(){
    DUMMYS s = {0,0,0,0};
    return dummyFunction(50,50,1,s);
}

在dummyFunction执行期间,我看到堆栈上的数据不正确.好像他们在哪里转移?我怎么能正确地做到这一点???我使用GCC 4.3.4 for ARM.

最佳答案 ‘extern“C”’指令实际上只对函数声明有用.这是因为C具有函数重载.我总是使用’​​#ifdef __cplusplus’在我的头文件中围绕函数签名嵌入指令.

#ifndef _DUMMY_C_H_
#define _DUMMY_C_H_

typedef struct {
int a;
int b;
int c;
int d;
}DUMMYS;

#ifdef __cplusplus
extern "C" {
#endif

int dummyFunction(unsigned int a, unsigned int b, unsigned short c, DUMMYS dummy);

#ifdef __cplusplus
}
#endif

#endif

C和C如何将成员置于结构中(当结构完全由C和C中合法的事物组成时)没有区别.

在dummyc.h中进行此更改时,可以删除dummycpp.cpp中#include指令周围的“extern”C“’.

点赞