我正在尝试在我的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“’.