主要内容

coder.wref

显示数据只写以引用的方式传递

描述

例子

coder.wref (参数)表明参数是一个只写表达式或变量通过引用一个外部C / c++函数。使用coder.wref只有在一个coder.ceval调用。这个函数允许代码生成器生成的代码优化作业之前被忽略参数MATLAB中®代码,因为外部函数假设不读取数据。写的所有元素参数在你的外部代码完全初始化内存。

请注意

C / c++函数必须完全初始化内存引用coder.wref (arg)。初始化内存的值分配给每一个元素参数在C / c++代码。如果生成的代码试图读取未初始化的内存,它可能导致未定义的运行时行为。

另请参阅coder.refcoder.rref

coder.wref (参数,gpu)表明参数是一个GPU的论点。这个选项需要一个有效的GPU编码器™许可证。如果coder.ceval所谓的CUDA®GPU__device__函数,代码生成器忽略了“图形”规范。

例子

通过引用传递数组只写

假设您有一个C函数init_array

空白init_array(双*数组,int元素个数){(int i = 0;我<元素个数;我+ +){array[我]= 42;}}

C函数定义了输入变量数组作为双指针。

调用C函数init_array初始化所有的元素y42:

Y = 0 (10);coder.ceval (“init_array”coder.wref (Y), int32(元素个数(Y)));

作为一个只写的引用传递多个参数

U = 0 (10);V = 0 (10);coder.ceval (“my_fcn”coder.wref (U)、int32(元素个数(U), coder.wref (V), int32(元素个数(V)));

通过类财产作为一个只写的参考

x = myClass;x。支持= 1;coder.ceval (“foo”coder.wref (x.prop));

通过结构作为一个只写的参考

表明C头文件中定义的结构类型,使用coder.cstructname

假设您的C函数init_struct。这个函数写入输入参数但是不读。

# include“MyStruct。h”空白init_struct (struct MyStruct * my_struct) {my_struct f1 - > = 1;my_struct - > f2 = 2;}

C头文件,MyStruct.h,定义一个结构类型命名MyStruct:

的ifndef MYSTRUCT # define MYSTRUCT typedef struct MYSTRUCT{双f1;双f2;}MyStruct;空白init_struct (struct MyStruct * my_struct);# endif

在你的MATLAB函数,通过结构作为一个只写的参考init_struct。使用coder.cstructname表明结构类型年代有名字MyStruct这是C头文件中定义的MyStruct.h

函数y = foo% # codegeny = 0;coder.updateBuildInfo (“addSourceFiles”,“init_struct.c”);s =结构(“f1”,1“f2”2);coder.cstructname(年代,“MyStruct”,“外来的”,“HeaderFile”,“MyStruct.h”);coder.ceval (“init_struct”coder.wref (s));

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

codegen配置:自由喷火报告

通过结构字段作为一个只写的参考

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

你也可以通过结构的一个元素的数组:

c = repmat(结构体(“u”魔法(2)1 10);b = repmat(结构体(“c”c) 3、6);一个=结构(“b”,b);coder.ceval (“foo”coder.wref (a.b (3, 4) . c (2) .u));

输入参数

全部折叠

参数按引用传递给外部C / c++函数。参数不能是一个类,一个系统对象™,单元阵列或索引单元阵列。

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

限制

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

    • 类或系统对象

    • 单元阵列或索引单元阵列

  • 如果一个属性的get方法,一组方法,或验证器,或者是一个系统对象属性与某些属性,那么你不能通过财产通过引用一个外部函数。看到按引用传递一些属性的不支持金宝app

提示

  • 如果参数是一个数组,然后呢coder.wref (arg)提供了数组的第一个元素的地址。的coder.wref (arg)功能不包含数组的大小的信息。如果C函数必须知道的元素数量的数据,通过这些信息作为一个单独的参数。例如:

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

  • 在MATLAB中,coder.wref会导致错误。用参数表示MATLAB代码,以便它可以运行在MATLAB和生成的代码,使用coder.target

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

扩展功能

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

GPU的代码生成
生成NVIDIA的CUDA®代码®GPU使用GPU编码器™。

版本历史

介绍了R2011a