Documentation

coder.ref

Package: coder

Pass argument by reference as read input or write output

Syntax

[y =] coder.ceval('function_name', coder.ref(arg), ... un)

Arguments

arg

Variable passed by reference as an input or an output to the external C/C++ function called in coder.ceval. arg must be a scalar variable, a matrix variable, or an element of a matrix variable.

Description

[y =] coder.ceval('function_name', coder.ref(arg), ... un) passes the variable arg by reference as an input or an output to the external C/C++ function called in coder.ceval. You add coder.ref inside coder.ceval as an argument to function_name. The argument list can contain multiple coder.ref constructs. Add a separate coder.ref construct for each argument that you want to pass by reference to function_name.

Only use coder.ref in MATLAB® code that you have compiled with codegen. coder.ref generates an error in uncompiled MATLAB code.

Examples

In the following example, a MATLAB function fcn has a single input u and a single output y. fcn calls a C function my_fcn, passing u by reference as an input. The value of output y is passed to fcn by the C function through its return statement.

Here is the MATLAB function code:

function y = fcn(u) %#codegen

y = 0; %Constrain return type to double
y = coder.ceval('my_fcn', coder.ref(u));

The C function prototype for my_fcn must be as follows:

double my_fcn(double *u)

In this example, the generated code infers the type of the input u from the codegen argument.

The C function prototype defines the input as a pointer because it is passed by reference.

The generated code cannot infer the type of the output y, so you must set it explicitly—in this case to a constant value 0 whose type defaults to double.

Was this topic helpful?