Specifying inputs/outputs for C-code functions generated from MATLAB m-code using emlc as pass-by-reference
5 次查看(过去 30 天)
显示 更早的评论
How do I make the generated c-code use pass-by-reference for all inputs and outputs instead of pass-by-value?
I am using emlc to generate c-code for a function that has constant, scalar, array (vector), and struct inputs and outputs. I am going to be calling this c-code from FORTRAN code, so I need to use pass-by-reference for all inputs and outputs. Depending on my FORTRAN compiler, I also may need to specify a calling convention. In the past, I have been writing wrappers for the generated code, which is tedious. How can I specify the interface that I want?
采纳的回答
Alexander Bottema
2011-8-17
To force call-by-reference for the top-level function you declare every input also as output.
Suppose you have the following function signature:
function y = foobar(a,b,c)
and you want call-by-reference on 'a', 'b' and 'c'.
Then add them as etra outputs:
function [y,a,b,c] = foobar(a,b,c)
For example:
function [y,a,b,c] = foobar(a,b,c) %#eml
y = a + b.field1 + c(3);
compiled with:
emlc -T RTW foobar.m -eg { 0, struct('field1',0), zeros(1,10) }
Will produce the C code:
real_T foobar(const real_T *a, const struct_T *b, const real_T c[10]) { return (*a + b->field1) + c[2]; }
As you can see the parameters 'a', 'b' and 'c' are now being passed by reference. In C arrays are always passed by reference so there are no need for using a pointer on that argument.
1 个评论
Benjamin
2024-3-12
This is quite an old answer by now. Is it with newer Matlab releases still not possible to specifiy this explicitly with a coder or embedded coder configuration?
I'm currently dealing with similar issues and wouuld love to hear if I still need to handle this the same way as suggested here in 2011.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fortran with MATLAB 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!