coder.ceval
생성 코드에서 C/C++ 함수 호출
구문
설명
out = coder.ceval(은 생성 코드의 functionName,arg1,...,argN)functionName에 지정된 C/C++ 함수를 호출합니다. 하나 이상의 입력 인수를 함수 호출 내에서 호출된 C/C++ 함수에 전달할 수 있습니다. 호출된 C/C++ 함수는 단일 스칼라 출력값을 반환할 수 있습니다. 예를 들어, 입력 인수 myChar과 출력 인수 isNum을 지정하여 C 표준 함수 isalnum을 호출하려면 isnum = coder.ceval("isalnum",myChar)을 사용하십시오.
코드 생성기는 코드 생성 시점에 C/C++ 함수가 반환하는 출력값의 유형을 알 수 없으므로 사용자가 coder.ceval을 호출하기 전에 out의 유형을 지정(예: 더미 값을 지정하여)해야 합니다. 비 스칼라 출력값을 갖는 변수를 C/C++ 함수에 전달할 때는 coder.ref (MATLAB Coder) 또는 coder.wref (MATLAB Coder)를 사용하여 참조 방식으로 전달할 수 있습니다.
C/C++ 표준 함수를 호출하려면 coder.ceval에 coder.cinclude (MATLAB Coder) 인수 또는 "-headerfile" 인수를 사용하여 헤더 파일을 지정해야 합니다. 사용자 지정 C/C++ 함수를 호출하려면 헤더 파일을 지정하는 것 외에도 coder.updateBuildInfo (MATLAB Coder)를 사용하여 외부 소스 파일 또는 라이브러리도 지정해야 합니다.
coder.ceval 함수는 생성 코드에서만 사용할 수 있습니다. MATLAB® 실행에서 coder.ceval을 호출하면 오류가 발생합니다. MATLAB 함수가 MATLAB에서 실행 중인지 확인하려면 coder.target (MATLAB Coder)을 사용하십시오.
out = coder.ceval(은 options,functionName,arg1,...,argN)options 인수에 지정된 옵션을 사용하여 functionName에 지정된 C/C++ 함수를 생성 코드에서 호출합니다. 예를 들어, C/C++ 헤더 파일을 지정하려면 "-headerfile"을 사용하고 호출된 C/C++ 함수에서 전역 변수가 사용된다는 것을 나타내려면 "-global"을 사용하십시오.
예제
생성 코드에서 C 표준 라이브러리 함수 cosh()를 호출하기 위해 coder.ceval을 사용합니다.
라디안 단위의 각도를 나타내는 double형 입력값을 받고 C 함수 cosh()를 사용하여 해당 각도의 쌍곡코사인을 계산하는 MATLAB 함수 callCosh를 만듭니다. coder.ceval을 사용하여 cosh()를 호출하고 coder.cinclude를 사용하여 cosh()가 정의된 math.h 헤더 파일을 포함시킵니다. math.h를 꺾쇠 괄호 <>로 묶어 math.h가 C 표준 헤더 파일로 식별되도록 합니다.
코드 생성 시점에는 coder.ceval 호출이 반환하는 출력값의 유형을 알 수 없으므로, 사전 할당을 통해 미리 유형이 정의된 변수에 출력값을 할당하여 coder.ceval 호출의 출력값을 알려진 유형으로 변환해야 합니다. 이 사전 할당을 수행하지 않으면 코드 생성이 실패합니다.
MATLAB 실행에서 coder.ceval을 호출하면 오류가 발생합니다. coder.ceval을 호출하기 전에 callCosh가 생성 코드에서 실행 중인지 확인하기 위해 coder.target (MATLAB Coder)을 사용합니다.
type callCosh.mfunction out = callCosh(x)
arguments
x (1,1) double
end
out = 0; % assign a dummy value to specify variable type
if coder.target("MATLAB")
disp("This function not supported in MATLAB execution");
else
coder.cinclude("<math.h>")
out = coder.ceval("cosh",x);
end
end
callCosh를 MATLAB에서 테스트합니다. callCosh는 coder.ceval을 호출하지 않습니다.
x = callCosh(1);
This function not supported in MATLAB execution
callCosh에 대한 MEX 함수를 생성합니다.
codegen callCoshCode generation successful.
생성된 MEX 함수 callCosh_mex를 라디안 각도를 사용하여 테스트합니다. callCosh는 생성 코드에서 실행되므로 coder.ceval에 대한 호출에서는 오류가 발생하지 않습니다.
callCosh_mex(pi)
ans = 11.5920
callCosh에 대한 C 코드를 생성하고 생성 코드를 검사합니다. 생성된 C 함수에는 cosh()에 대한 호출이 포함되어 있습니다.
codegen -config:lib callCosh
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","callCosh","callCosh.c"))
/*
* File: callCosh.c
*
* MATLAB Coder version : 25.1
* C/C++ source code generated on : 13-Jul-2025 17:33:20
*/
/* Include Files */
#include "callCosh.h"
#include <math.h>
/* Function Definitions */
/*
* Arguments : double x
* Return Type : double
*/
double callCosh(double x)
{
/* assign a dummy value to specify variable type */
return cosh(x);
}
/*
* File trailer for callCosh.c
*
* [EOF]
*/
생성 코드에서 coder.ceval을 사용하여 C 함수 fopen(), fclose(), fscanf()를 호출하고, 이러한 함수를 사용하여 쉼표로 구분된 값이 포함된 텍스트 파일의 첫 번째 라인을 읽어옵니다. 이러한 C 함수에 상응하는 MATLAB 함수 fopen, fclose, fscanf가 코드 생성에서 지원됩니다. 이 예제에서는 C 파일 I/O 함수를 직접 호출하는 방법을 보여줍니다.
C 파일 I/O 함수 fopen(), fclose(), fscanf()를 호출하기 위해 coder.ceval을 사용하여 텍스트 파일 data.csv의 첫 번째 라인을 반환하는 MATLAB 함수 useCFileIO를 만듭니다. coder.cinclude를 꺾쇠 괄호와 함께 사용하여 C 파일 I/O 함수가 정의된 C 표준 헤더 파일 stdio.h를 생성 코드에 포함시킵니다. coder.opaque (MATLAB Coder)를 사용하여, 파일 포인터를 저장하는 변수를 유형이 FILE *이고 초기값이 NULL인 변수로 초기화합니다.
coder.ceval은 배열 출력을 지원하지 않으므로, coder.wref를 사용하여 참조 방식으로 출력 변수 out을 C 함수 fscanf()에 전달합니다. 코드 생성 시점에는 out의 유형이 알려져 있지 않으므로 coder.ceval을 호출하기 전에 더미 값을 사용하여 이 변수를 초기화합니다. 이 할당을 수행하지 않으면 코드 생성이 실패합니다. coder.ceval을 사용하여 MATLAB 문자형 벡터를 C/C++ 함수로 전달하려면 각 문자형 벡터를 null 문자(0)로 명시적으로 종료해야 합니다. 자세한 내용은 Generate C/C++ Strings from MATLAB Strings and Character Row Vectors (MATLAB Coder) 항목을 참조하십시오.
MATLAB 실행에서 coder.ceval을 호출하면 오류가 발생합니다. coder.ceval을 호출하기 전에 useCFileIO가 생성 코드에서 실행 중인지 확인하려면 coder.target을 사용합니다.
type useCFileIO.mfunction out = useCFileIO %#codegen
fileName = 'data.csv';
if coder.target("MATLAB")
fid = fopen(fileName);
out = fscanf(fid, "%f,%f,%f",3);
fclose(fid);
else
coder.cinclude("<stdio.h>")
fileName = [fileName 0];
fileMode = ['r' 0];
fileFormat = ['%lf,%lf,%lf' 0];
fileHandle = coder.opaque("FILE*", "NULL");
fileHandle = coder.ceval("fopen", fileName, fileMode);
out = [0,0,0];
coder.ceval("fscanf", fileHandle, fileFormat, ...
coder.wref(out), coder.wref(out(2)), coder.wref(out(3)));
coder.ceval("fclose", fileHandle);
end
useCFileIO에 대한 MEX 함수를 생성하고 테스트합니다.
codegen useCFileIOCode generation successful.
out = useCFileIO_mex
out = 1×3
0.7071 0.6690 0.5985
useCFileIO에 대한 C 코드를 생성하고 생성 코드를 검사합니다. 생성된 C 함수는 fopen(), fclose(), fscanf()를 직접 호출합니다.
codegen -config:lib -c useCFileIO
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","useCFileIO","useCFileIO.c"))
/*
* File: useCFileIO.c
*
* MATLAB Coder version : 25.1
* C/C++ source code generated on : 13-Jul-2025 17:33:15
*/
/* Include Files */
#include "useCFileIO.h"
#include <stdio.h>
/* Function Definitions */
/*
* Arguments : double out[3]
* Return Type : void
*/
void useCFileIO(double out[3])
{
static const char b_fileFormat[12] = "%lf,%lf,%lf";
static const char b_fileName[9] = "data.csv";
FILE *fileHandle;
int i;
char fileFormat[12];
char fileName[9];
for (i = 0; i < 9; i++) {
fileName[i] = b_fileName[i];
}
char fileMode[2];
fileMode[0] = 'r';
fileMode[1] = '\x00';
fileHandle = fopen(&fileName[0], &fileMode[0]);
out[0] = 0.0;
out[1] = 0.0;
out[2] = 0.0;
for (i = 0; i < 12; i++) {
fileFormat[i] = b_fileFormat[i];
}
fscanf(fileHandle, &fileFormat[0], &out[0], &out[1], &out[2]);
fclose(fileHandle);
}
/*
* File trailer for useCFileIO.c
*
* [EOF]
*/
MATLAB 함수 addTwo에서 사용자 지정 C 함수 myAdd()를 호출합니다.
사용자 지정 C 함수 만들기
C 헤더 파일 myAdd.h를 만듭니다. 이 헤더 파일에, double형 입력 인수 두 개를 받고 double형 값 하나를 반환하는 함수 myAdd()를 선언합니다.
type myAdd.hdouble myAdd(double a, double b);
두 개의 입력 인수를 추가하는 C 함수 myAdd()를 만듭니다. 함수를 myAdd.c에 저장하고 헤더 파일 myAdd.h를 포함시킵니다.
type myAdd.c#include <stdio.h>
#include <stdlib.h>
#include "myAdd.h"
double myAdd(double a, double b)
{
return a + b;
}
사용자 지정 C 함수를 호출하는 MATLAB 함수 만들기
coder.ceval을 사용하여 사용자 지정 C 함수 myAdd()를 호출하는 MATLAB 함수 addTwo를 만듭니다. myAdd() C 함수를 모방하는 로컬 MATLAB 함수 myAddML을 만듭니다. addTwo가 MATLAB에서 실행되는 경우에는 로컬 MATLAB 함수 myAddML을 호출하고 생성 코드에서 실행되는 경우에는 C 함수 myAdd()를 호출하도록 하려면 coder.target (MATLAB Coder)을 사용합니다. 컴파일러에게 myAdd() 함수가 포함된 C 파일을 찾을 수 있는 위치를 알려주려면 coder.updateBuildInfo (MATLAB Coder)를 사용하고, 코드 생성기에게 myAdd.h 헤더 파일을 포함하도록 지시하려면 coder.ceval을 "-headerfile" 옵션과 함께 사용합니다.
type addTwo.mfunction z = addTwo(x,y) %#codegen
arguments
x (1,1) double;
y (1,1) double;
end
z = 0;
if coder.target("MATLAB")
% Executing in MATLAB, call local MATLAB function
z = myAddML(x,y);
else
% Executing in generated code, call C function
coder.updateBuildInfo("addSourceFiles","myAdd.c");
z = coder.ceval("-headerfile","myAdd.h","myAdd",x,y);
end
end
function out = myAddML(a,b)
arguments
a (1,1) double
b (1,1) double
end
out = a + b;
end
MEX 함수 생성 및 테스트
addTwo에 대한 MEX 함수를 생성하고, 동일한 입력값에 대해 addTwo_mex의 출력값과 addTwo의 출력값이 일치하는지 확인합니다.
codegen addTwoCode generation successful.
addTwo(4,5)
ans = 9
addTwo_mex(4,5)
ans = 9
C 코드 생성하기 및 검사하기
명령줄에서 codegen 명령을 -config:lib 옵션과 함께 사용하여 addTwo에서 독립 실행형 C 라이브러리로 패키징된 C 코드를 생성합니다. 생성된 C 코드에는 myAdd() C 함수에 대한 호출을 비롯하여 지시문 #include "myAdd.h"에 대한 호출도 포함되어 있습니다.
codegen -config:lib addTwo.m
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","addTwo","addTwo.c"))
/*
* File: addTwo.c
*
* MATLAB Coder version : 25.1
* C/C++ source code generated on : 13-Jul-2025 17:33:38
*/
/* Include Files */
#include "addTwo.h"
#include "myAdd.h"
/* Function Definitions */
/*
* Arguments : double x
* double y
* Return Type : double
*/
double addTwo(double x, double y)
{
/* Executing in generated code, call C function */
return myAdd(x, y);
}
/*
* File trailer for addTwo.c
*
* [EOF]
*/
C++에서 멤버 함수(메서드라고도 함)는 특정 클래스 또는 객체와 연결된 함수입니다. coder.ceval을 사용하여 생성 코드에서 사용자 지정 C++ 클래스 MyClass의 퍼블릭 메서드를 호출합니다.
간단한 C++ 클래스 만들기
이 예제에서는 C++ 클래스 MyClass를 MyClass.hpp 파일에 생성합니다. 이 헤더 파일에 상수 값을 반환하는 함수 getValue()를 정의합니다.
type MyClass.hppclass MyClass {
public:
double getValue() const {
return 3.14;
}
};
생성 코드에서 멤버 함수 호출하기
C++ 멤버 함수 getValue()를 호출하는 MATLAB 함수 callGetValue를 호출합니다. coder.opaque (MATLAB Coder)를 사용하여 변수 instanceOfMyClass를 C++ 클래스 MyClass의 인스턴스로 선언합니다. "HeaderFile" 인수를 사용하여 MyClass가 헤더 파일 MyClass.hpp에 정의되어 있음을 나타냅니다.
coder.ceval을 사용하여 생성 코드에서 getValue()를 호출하기 위해 C++ 함수 템플릿 std:mem_fn을 사용하여 getValue()에 액세스합니다. 이 함수 템플릿은 C++ 표준 헤더 <functional>에 정의되어 있습니다. 코드 생성기가 값 방식이 아닌 참조 방식으로 이 변수를 전달하도록 강제하려면 coder.ref를 사용하여 instanceOfMyClass를 getValue()로 전달합니다.
type callGetValue.mfunction out = callGetValue
instanceOfMyClass = coder.opaque("MyClass", "MyClass{}", "HeaderFile", "MyClass.hpp");
out = 0;
out = coder.ceval("-headerfile", "<functional>", ...
"std::mem_fn(&MyClass::getValue)", coder.ref(instanceOfMyClass));
end
MEX 함수 생성 및 테스트
callGetValue에 대한 MEX 함수를 생성하고, MEX 함수가 예상 출력값을 생성하는지 확인합니다. C++ MEX 함수를 생성하기 위해 -lang:C++를 codegen 명령에 지정합니다.
codegen -lang:c++ callGetValue
Code generation successful.
callGetValue_mex
ans = 3.1400
C++ 코드 생성하기 및 검사하기
명령줄에서 codegen 명령을 -config:lib 옵션, -lang:c++ 옵션과 함께 사용하여 callGetValue에서 독립 실행형 C++ 라이브러리로 패키징된 C++ 코드를 생성합니다. 생성된 C++ 코드는 MyClass의 인스턴스를 생성하고 멤버 함수 getValue()를 호출합니다.
codegen -config:lib -lang:c++ callGetValue
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","callGetValue","callGetValue.cpp"))
//
// File: callGetValue.cpp
//
// MATLAB Coder version : 25.1
// C/C++ source code generated on : 13-Jul-2025 17:33:42
//
// Include Files
#include "callGetValue.h"
#include "MyClass.hpp"
#include <functional>
// Function Definitions
//
// Arguments : void
// Return Type : double
//
double callGetValue()
{
MyClass instanceOfMyClass;
instanceOfMyClass = MyClass{};
return std::mem_fn(&MyClass::getValue)(&instanceOfMyClass);
}
//
// File trailer for callGetValue.cpp
//
// [EOF]
//
사용자 지정 C/C++ 라이브러리에 정의된 C/C++ 함수를 coder.ceval을 사용하여 호출할 수 있습니다. 이러한 함수에는 자체 초기화 함수와 자체 종료 함수가 있을 수 있습니다.
사용자 지정 C 함수와 라이브러리 만들기
이 예제에서는 구간 [min, max]에서 의 정적분을 계산하는 MATLAB 함수 integrateSquare를 만듭니다. integrateSquare를 위한 독립 실행형 C 라이브러리를 생성합니다.
type integrateSquare.mfunction out = integrateSquare(min,max)
arguments
min (1,1) double
max (1,1) double
end
f = @(x) x.^2;
out = integral(f, min, max);
end
codegen -config:lib integrateSquare
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
생성된 C 코드를 검사합니다. 이 코드는 codegen/lib/integrateSquare 디렉터리에 있습니다. integrateSquare 라이브러리와 헤더 파일을 비롯하여 integrateSquare_initialize() 함수와 integrateSquare_terminate() 함수에 대한 정의가 포함된 파일도 동일한 디렉터리에 있습니다.
type(fullfile("codegen","lib","integrateSquare","integrateSquare.c"))
/*
* File: integrateSquare.c
*
* MATLAB Coder version : 25.1
* C/C++ source code generated on : 13-Jul-2025 17:33:24
*/
/* Include Files */
#include "integrateSquare.h"
#include "integral.h"
#include "rt_nonfinite.h"
/* Function Definitions */
/*
* Arguments : double b_min
* double b_max
* Return Type : double
*/
double integrateSquare(double b_min, double b_max)
{
return integral(b_min, b_max);
}
/*
* File trailer for integrateSquare.c
*
* [EOF]
*/
사용자 지정 C 함수를 호출하는 MATLAB 함수 만들기
coder.ceval을 사용하여 사용자 지정 C 함수 integrateSquare()를 호출하는 MATLAB 함수 callIntegrateSquare를 만듭니다. 이 예제에서는, integrateSquare()를 호출하기 전에 integrateSquare_initialize() 함수를 호출하고, integrateSquare()를 호출한 후에 integrateSquare_terminate()를 호출합니다.
coder.updateBuildInfo (MATLAB Coder)를 사용하여 integrateSquare() 라이브러리와 기타 파일이 포함된 디렉터리를 include 경로에 추가합니다. coder.updateBuildInfo 함수 호출에서는 START_DIR 매크로를 사용하여 현재 작업 폴더를 참조할 수 있습니다. 이 매크로는 MATLAB 코드에서 코드 생성을 위해서만 사용할 수 있습니다. MATLAB 코더는 플랫폼별 확장자를 사용하여 정적 라이브러리 파일을 생성하므로 ispc를 사용하여 플랫폼에 적합한 확장자를 사용하도록 합니다.
type callIntegrateSquare.mfunction out = callIntegrateSquare(x,y) %#codegen
arguments
x (1,1) double
y (1,1) double
end
if coder.target("MATLAB")
disp("Calling MATLAB function");
out = integrateSquare(x,y);
else
disp("Calling custom C function");
out = 0;
coder.updateBuildInfo("addIncludePaths", ...
"$(START_DIR)/codegen/lib/integrateSquare");
if ispc
coder.updateBuildInfo("addLinkObjects","integrateSquare.lib", ...
"$(START_DIR)/codegen/lib/integrateSquare","",true,true);
else
coder.updateBuildInfo("addLinkObjects","integrateSquare.a", ...
"$(START_DIR)/codegen/lib/integrateSquare","",true,true);
end
coder.ceval("-headerfile","integrateSquare_initialize.h", ...
"integrateSquare_initialize");
out = coder.ceval("-headerfile","integrateSquare.h","integrateSquare", ...
x,y);
coder.ceval("-headerfile","integrateSquare_terminate.h", ...
"integrateSquare_terminate");
end
end
MEX 함수 생성 및 테스트
callIntegrateSquare에 대한 MEX 함수를 생성합니다. MATLAB 함수 결과와 MEX 함수 결과가 일치하는지 확인합니다.
codegen callIntegrateSquareCode generation successful.
callIntegrateSquare(-2,2)
Calling MATLAB function
ans = 5.3333
callIntegrateSquare_mex(-2,2)
Calling custom C function
ans = 5.3333
C 코드 생성하기 및 검사하기
callIntegrateSquare를 위한 독립 실행형 C 라이브러리를 생성하고, 생성 코드에서 integrateSquare_initialize(), integrateSquare(), integrateSquare_terminate()에 대한 호출을 검사합니다.
codegen -config:lib callIntegrateSquare
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","callIntegrateSquare","callIntegrateSquare.c"))
/*
* File: callIntegrateSquare.c
*
* MATLAB Coder version : 25.1
* C/C++ source code generated on : 13-Jul-2025 17:33:33
*/
/* Include Files */
#include "callIntegrateSquare.h"
#include "coder_platform.h"
#include "integrateSquare.h"
#include "integrateSquare_initialize.h"
#include "integrateSquare_terminate.h"
/* Function Definitions */
/*
* Arguments : double x
* double y
* Return Type : double
*/
double callIntegrateSquare(double x, double y)
{
double out;
coderIsPC();
integrateSquare_initialize();
out = integrateSquare(x, y);
integrateSquare_terminate();
return out;
}
/*
* File trailer for callIntegrateSquare.c
*
* [EOF]
*/
복소수 입력값을 받는 사용자 지정 C 코드를 호출하는 MATLAB 함수가 있다고 가정하겠습니다. MATLAB 함수의 복소수 입력값이 사용자의 C 코드에 매핑될 수 있도록 C 코드 입력 파라미터를 정의해야 합니다.
생성 코드에는 복소수가 두 개의 필드를 갖는 struct로 정의되어 있으며, 두 필드는 각각 복소수의 실수부인 re와 허수부인 im입니다. 이 struct는 헤더 파일 rtwtypes.h에 정의되어 있으며, 사용자는 현재 경로의 codegen\lib\functionName 폴더에서 찾을 수 있습니다. struct는 다음과 같이 정의됩니다.
typedef struct {
real32_T re; /*Real Component*/
real32_T im; /*Imaginary Component*/
} creal_T;
자세한 내용은 Mapping MATLAB Types to Types in Generated Code (MATLAB Coder) 항목을 참조하십시오.
통합할 C 코드에는 rtwtypes.h 헤더 파일이 포함되어 있어야 합니다. 예제 C 코드 foo.c는 아래와 같습니다.
#include "foo.h"
#include<stdio.h>
#include<stdlib.h>
#include "rtwtypes.h"
double foo(creal_T x) {
double z = 0.0;
z = x.re*x.re + x.im*x.im;
return (z);
}struct의 이름은 creal_T입니다. 헤더 파일 foo.h도 다음과 같이 정의되어야 합니다.
#include "rtwtypes.h" double foo(creal_T x);
MATLAB 코드는 복소수 입력값을 갖는 coder.ceval 함수를 사용하여 foo.c를 실행합니다.
function y = complexCeval %#codegen y = 0.0; coder.updateBuildInfo("addSourceFiles","foo.c"); coder.cinclude("foo.h"); y = coder.ceval("foo", 10+20i); end
coder.ceval 명령은 복소수 입력값을 받습니다. 코드 생성기는 복소수를 struct creal_T 변수 x와 해당 변수의 필드 re 및 im에 매핑합니다.다음 명령을 실행하여 함수 complexCeval에 대한 코드를 생성합니다.
codegen -config:lib -report complexCeval
입력 인수
생성 코드에서 실행할 C/C++ 함수의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. functionName은 코드 생성 시점에 상수여야 합니다.
예: x = coder.ceval("myFunction")
예: coder.ceval("myFunction")
데이터형: char | string
호출된 C/C++ 함수에 대한 인수로, 함수에 필요한 순서대로 문자형 벡터, 배열, 배열의 요소, 구조체, 구조체 필드 또는 객체 속성이 쉼표로 구분되어 지정됩니다. string형 스칼라와 string형 배열은 지원되지 않습니다.
기본적으로 coder.ceval은 호출된 C/C++ 함수가 값 방식 인수 전달을 지원하는 경우에는 C/C++ 함수에 인수를 값으로 전달합니다. coder.ceval이 인수를 참조 방식으로 전달하도록 강제하려면 구문 coder.ref (MATLAB Coder), 구문 coder.rref (MATLAB Coder), 구문 coder.wref (MATLAB Coder)를 사용하십시오. 인수가 배열인 경우와 같이 C/C++ 함수가 값 방식 인수 전달을 지원하지 않는 경우 coder.ceval은 인수를 참조 방식으로 전달합니다. coder.ref, coder.rref 또는 coder.wref를 사용하지 않으면 C/C++ 함수 인수의 복사본이 생성 코드에 표시되어 배열의 MATLAB 의미 체계를 적용합니다.
예: x = coder.ceval("tolower",myChar)
예: coder.ceval("myFunction",coder.ref(x))
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | struct
복소수 지원 여부: 예
coder.ceval이 평가하는 C/C++ 함수 호출을 위한 옵션으로, 옵션 값 또는 쉼표로 구분된 옵션 값 목록으로 지정됩니다. coder.ceval 함수에는 여러 옵션을 지정할 수 있으며, 옵션은 어떤 순서로 지정해도 좋습니다. 모든 옵션(headerfile 포함)은 코드 생성 시점에 상수여야 합니다. 다음 표에는 coder.ceval에 사용할 수 있는 옵션이 나와 있습니다.
| 옵션 | 설명 |
|---|---|
"-global" | coder.ceval이 호출할 C/C++ 함수가 하나 이상의 전역 변수를 사용하도록 지정합니다. -global 옵션은 호출된 C/C++ 함수에서 전역 변수를 사용하지 못하도록 할 수 있는 특정 코드 생성 최적화를 금지합니다. |
"-gpudevicefcn" | coder.ceval이 호출할 C/C++ 함수가 GPU 장치에 위치하도록 지정합니다. 이 옵션을 사용하면 커널 내에서 CUDA® GPU __device__ 함수를 호출할 수 있습니다. 이 옵션을 사용하려면 GPU Coder™ 라이선스가 필요합니다. |
"-headerfile","headerfile" |
C/C++ 표준 헤더 파일을 포함하려면 헤더 파일 이름을 꺾쇠 괄호 비표준 헤더 파일을 포함하려면 꺾쇠 괄호를 생략합니다. 생성된 include 경로를 지정하려면 |
"-layout:any" | 배열 레이아웃이 일치하지 않는 경우에도, 데이터 레이아웃을 변경하지 않고 생성 코드와 호출된 C/C++ 함수 간에 입력 데이터와 출력 데이터를 전달할 수 있습니다. |
"-layout:rowMajor" 또는 "-row" | 생성 코드와 호출된 C/C++ 함수 간에 입력 데이터와 출력 데이터를 행 우선 레이아웃으로 전달합니다. 열 우선 레이아웃을 사용하는 MATLAB 함수 또는 MATLAB Function 블록에서 호출되는 경우, 코드 생성기는 입력값을 행 우선 레이아웃으로 변환하고 출력값을 다시 열 우선 레이아웃으로 변환합니다. |
"-layout:columnMajor" 또는 "-col" | 생성 코드와 호출된 C/C++ 함수 간에 입력 데이터와 출력 데이터를 열 우선 레이아웃으로 전달합니다. 행 우선 레이아웃을 사용하는 MATLAB 함수 또는 MATLAB Function 블록에서 호출되는 경우, 코드 생성기는 입력값을 열 우선 레이아웃으로 변환하고 출력값을 다시 행 우선 레이아웃으로 변환합니다. 이 동작이 디폴트 값입니다. |
예: coder.ceval("-headerfile","myHeader.h","-layout:rowMajor","-global","myFunction",coder.rref(in),coder.wref(out));
제한 사항
coder.extrinsic(MATLAB Coder)을 사용하여 외재적 함수로 선언한 함수에는coder.ceval을 사용할 수 없습니다.속성에 get 메서드, set 메서드 또는 유효성 검사기가 있거나 속성이 속성값을 제한 또는 수정하는 특성이 있는 System object™ 속성인 경우 속성을 외부 함수에 참조 방식으로 전달할 수 없습니다. Passing by Reference Not Supported for Some Properties 항목을 참조하십시오.
행 우선 코드 생성에서는 진입점 파라미터에 가변 크기 행렬을 사용할 수 없습니다.
MATLAB 코드에서 초기화된 배열의 크기를 변경하는 데에는
coder.ceval을 사용할 수 없습니다.
팁
coder.ceval을 사용하여 포인터, 파일 I/O에 대한FILE유형, C/C++ 매크로와 같이 MATLAB 코드에 존재하지 않는 변수의 유형을 받거나 반환하는 C/C++ 함수를 호출하려면coder.opaque함수를 사용하십시오.coder.ceval을 사용하여 호출되는 외부 코드와 생성 코드는 동일한 프로세스 내에서 실행되며 메모리를 공유합니다. 외부 코드가 생성 코드에서 사용하는 데이터 구조체가 포함된 메모리에 쓰기를 잘못 수행하면 예기치 않은 동작이나 비정상 종료가 발생할 수 있습니다. 예를 들어, 외부 코드가 배열의 끝점 이후에 배열에 데이터 쓰기를 시도하면 생성 코드가 예기치 않게 작동하거나 비정상 종료가 발생할 수 있습니다.MATLAB은 Windows®에서 UTF-8을 시스템 인코딩으로 사용합니다. 결과적으로, 생성된 MEX 함수 내에서 수행된 시스템 호출은 UTF-8로 인코딩된 문자열을 받고 반환합니다. 반면에, MATLAB Coder™로 생성된 코드는 Windows 로캘에 지정된 인코딩을 사용하여 텍스트 데이터를 인코딩합니다. 따라서 MATLAB 진입점 함수가
coder.ceval(MATLAB Coder)을 사용하여 시스템 인코딩이 다른 것으로 간주되는 외부 C/C++ 함수를 호출하는 경우, 생성된 MEX 함수는 깨진 텍스트를 생성할 수 있습니다. 이러한 경우에는 외부 C/C++ 함수를 업데이트해야 합니다.coder.ceval을 사용하여 MATLAB 문자형 벡터를 C/C++ 함수로 전달하려면 각 문자형 벡터를 null 문자(0)로 명시적으로 종료해야 합니다. 자세한 내용은 Generate C/C++ Strings from MATLAB Strings and Character Row Vectors (MATLAB Coder) 항목을 참조하십시오.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
coder.ceval 함수는 MATLAB과 HDL Coder™의 상위수준 합성(HLS) 간 워크플로만 지원합니다.
버전 내역
R2011a에 개발됨R2024a부터는 "-headerfile" 이름-값 인수를 사용하여 coder.ceval 호출 내에서 C/C++ 함수에 대한 헤더 파일을 지정할 수 있습니다. R2024a 이전에는 coder.ceval을 호출하기 전에 coder.cinclude를 호출하여 헤더 파일을 별도로 지정해야 했습니다.
참고 항목
coder.ref | coder.rref | coder.wref | coder.target | coder.extrinsic | coder.opaque | coder.updateBuildInfo
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)