主要内容

coder.ref

指示要通过引用传递的数据

描述

例子

coder.ref (参数表明参数是通过引用传递给外部C/ c++函数的表达式或变量。使用coder.ref在一个coder.ceval只有打电话。C/ c++函数可以读取或写入引用传递的变量。使用单独的coder.ref为通过引用传递给函数的每个参数构造。

另请参阅coder.rref而且coder.wref

coder.ref (参数, gpu)表明参数是GPU参数。此选项需要有效的GPU Coder™许可证。如果coder.ceval调用CUDA®GPU__device__函数时,代码生成器将忽略“图形”规范。

例子

通过引用传递标量变量

考虑C函数addone返回输入值加1的函数:

Double addone(Double *p){返回*p + 1;}

C函数定义输入变量p作为指向double类型的指针。

通过引用传递输入addone

...Y = 0;U = 42;Y = code .ceval(“addone”, coder.ref (u));...

通过引用传递多个参数

...U = 1;V = 2;Y = code .ceval(“my_fcn”, code .ref(u), code .ref(v));...

通过引用传递类属性

...x = myClass;X.prop = 1;coder.ceval (“foo”coder.ref (x.prop));...

通过引用传递一个结构

要指示结构类型是在C头文件中定义的,请使用coder.cstructname

假设你有一个C函数incr_struct.这个函数读取和写入输入参数。

#include "MyStruct.h" void incr_struct(struct MyStruct *my_struct) {my_struct->f1 = my_struct->f1 + 1;My_struct ->f2 = My_struct ->f2 + 1;}

C头文件,MyStruct.h,定义名为MyStruct

#定义MYSTRUCT MYSTRUCT类型定义MYSTRUCT {double f1;双f2;} MyStruct;(构造MyStruct *my_struct);# endif

在MATLAB中®函数,通过引用传递结构incr_struct.的结构类型年代有名字MyStruct在C头文件中定义MyStruct.h,使用coder.cstructname

函数Y = foo% # codegenY = 0;coder.updateBuildInfo (“addSourceFiles”“incr_struct.c”);S = struct(“f1”,1,“f2”2);coder.cstructname(年代,“MyStruct”“外来的”“HeaderFile”“MyStruct.h”);coder.ceval (“incr_struct”coder.ref (s));

要生成独立的库代码,输入:

codegen配置:自由喷火报告

通过引用传递结构字段

...S = struct(“s1 '结构(“一个”, [0 1]));coder.ceval (“foo”coder.ref (s.s1.a));...

你也可以传递一个结构数组的元素:

...C = repmat(struct(“u”魔法(2)1 10);B = repmat(struct(“c”c) 3、6);A = struct(“b”, b);coder.ceval (“foo”coder.ref (a.b (3, 4) . c (2) .u));...

输入参数

全部折叠

参数,通过引用传递给外部C/ c++函数。参数不能是类、System对象™、单元格数组或单元格数组的索引。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|字符|结构体
复数支持:金宝app是的

限制

  • 不能通过引用传递这些数据类型:

    • 类或系统对象

    • 单元格数组或索引到单元格数组

  • 如果属性具有get方法、set方法或验证器,或者是具有某些属性的System对象属性,则不能通过引用将该属性传递给外部函数。看到某些属性不支持传递引用金宝app

提示

  • 如果参数是数组吗coder.ref (arg)提供数组的第一个元素的地址。的coder.ref (arg)函数不包含关于数组大小的信息。如果C函数必须知道数据的元素数量,则将该信息作为单独的参数传递。例如:

    coder.ceval (“myFun”coder.ref (arg)、int32(元素个数(arg));
  • 当通过引用将结构传递给外部C/ c++函数时,使用coder.cstructname提供在C头文件中定义的C结构类型的名称。

  • 在MATLAB中,coder.ref导致错误。若要参数化MATLAB代码,使其可以在MATLAB和生成的代码中运行,请使用coder.target

  • 你可以使用coder.opaque来声明传递给外部C/ c++函数的变量。

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

GPU代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。

版本历史

在R2011a中引入