加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:18:07 所属栏目:百科 来源:网络整理
导读:我正在尝试在我的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 dummyF
我正在尝试在我的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,DUMMYS dummy){
    return 1;
}

dummycpp.cpp:

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

int main(){
    DUMMYS s = {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,DUMMYS dummy);

#ifdef __cplusplus
}
#endif

#endif

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读