Documentation

# `generate`::`C`

Generate C formatted string

MuPAD® notebooks will be removed in a future release. Use MATLAB® live scripts instead.

MATLAB live scripts support most MuPAD functionality, though there are some differences. For more information, see Convert MuPAD Notebooks to MATLAB Live Scripts.

## Syntax

```generate::C(`e`, <NoWarning>)
```

## Description

`generate::C(e)` generates C code for the MuPAD® expression `e`.

`generate::C` returns a C formatted string representing an expression, equation, list of equations or a matrix.

An equation represents an assignment in C code. The type of the assignment is `double`.

When generating C code for a matrix, the generator assigns only nonzero elements. See Example 3.

To print an output string to a file, use the `fprint` function. Use the printing option `Unquoted` to remove quotation marks and to expand special characters like line breaks and tabs.

Use the `generate::optimize` function to optimize the MuPAD code before converting it to C code. See Example 5.

The `NoWarning` option lets you suppress warnings. See Example 6.

## Examples

### Example 1

The code generator converts a list of equations to a sequence of assignments:

```generate::C([x1 = y2^2*(y1 + sin(z)), x2 = tan(x1^4)]): print(Unquoted, %)```
``` x1 = (y2*y2)*(y1+sin(z)); x2 = tan(x1*x1*x1*x1); ```

### Example 2

MuPAD matrix and array indexing differs from C array indexing. By default, MuPAD array indices start with 1, and C array indices start with 0. To create the code compatible with the default indexing in C, the `generate::C` function decrements each index by one:

```A:= matrix([[1,2],[3,4]]): generate::C(A)."\n". generate::C(hold(Determinante = A[1,1]*A[2,2] - A[1,2]*A[2,1])): print(Unquoted, %)```
``` A = 1.0; A = 2.0; A = 3.0; A = 4.0; Determinante = A*A-A*A; ```

### Example 3

Generated C code does not include assignments for zero elements of a matrix:

```A:= matrix([[1, 0, 0],[0, 0, 1]]): print(Unquoted, generate::C(A))```
``` A = 1.0; A = 1.0; ```

### Example 4

If the first index of an array is not 1, the `generate::C` function issues a warning:

```A:= array(1..2, 2..3, [[1,2],[3,4]]): print(Unquoted, generate::C(A))```
```Warning: Array index 'A[1..2, 2..3]' out of range 1..n. ```
``` A = 1.0; A = 2.0; A = 3.0; A = 4.0; ```

### Example 5

The `generate::C` function does not optimize your code:

```print(Unquoted, generate::C([x = a + b, y = (a + b)^2])):```
``` x = a+b; y = pow(a+b,2.0); ```

You can use the `generate::optimize` function before converting your MuPAD expression to C code. For example, this function can reduce the number of operations by finding common subexpressions:

```print(Unquoted, generate::C( generate::optimize([x = a + b, y = (a + b)^2]) )):```
``` x = a+b; y = x*x; ```

### Example 6

By default, the `generate::C` function can issue warnings:

`print(Unquoted, generate::C(f(x)))`
```Warning: Function 'f' not verified to be a valid C function. ```
``` t0 = f(x); ```

If you started using `generate::C` recently, the warnings can help you identify the potential issues in the converted code. If you want to suppress warnings, use the `NoWarning` option:

`print(Unquoted, generate::C(f(x), NoWarning))`
``` t0 = f(x); ```

## Parameters

 `e` An expression, equation, list of equations, or a matrix

## Options

 `NoWarning` Suppress warnings.

## Return Values

`generate::C` returns a string containing C code.