Error using mex G:\Matlab_​WS\code_te​st\Assignm​ent1\Add_T​wo.c:3:1: warning: return type defaults to 'int' [-Wimplicit-int] Add_Two(U16 a, U16 b)

10 ビュー (過去 30 日間)
Trying to understand mex compilation with an example, but getting compilation error. Below are the commands that I used to compile. Mex file is generated but its compilation failed.
def = legacy_code('initialize');
def.SourceFiles = {'Add_Two.c'};
def.HeaderFiles = {'Add_Two.h'};
def.SFunctionName = 'Add_Two_SFun';
def.OutputFcnSpec = 'uint32 y1 = Add_Two(uint16 u1, uint16 u2)';
legacy_code('sfcn_cmex_generate', def);
>> legacy_code('compile', def)
### Start Compiling Add_Two_SFun
mex('-IG:\Matlab_WS\code_test\Assignment1', '-c', '-outdir', 'C:\Users\Shafi\AppData\Local\Temp\tp548d5365_ef4a_45c6_9aec_e200ba5a55ff', 'G:\Matlab_WS\code_test\Assignment1\Add_Two.c')
Building with 'MinGW64 Compiler (C)'.
Error using mex
G:\Matlab_WS\code_test\Assignment1\Add_Two.c:3:1: warning: return type defaults to 'int'
[-Wimplicit-int]
Add_Two(U16 a, U16 b)
^
G:\Matlab_WS\code_test\Assignment1\Add_Two.c:3:1: error: conflicting types for 'Add_Two'
In file included from G:\Matlab_WS\code_test\Assignment1\Add_Two.c:1:0:
G:\Matlab_WS\code_test\Assignment1/Add_Two.h:11:5: note: previous declaration of 'Add_Two' was here
U32 Add_Two(U16 a, U16 b);
^
Error in legacycode.LCT/compile
Error in legacycode.LCT.legacyCodeImpl
Error in legacy_code (line 101)
[varargout{1:nargout}] = legacycode.LCT.legacyCodeImpl(action, varargin{1:end});
***************************************************
Input files:
Add_Two.c:
#include <Add_Two.h>
Add_Two(U16 a, U16 b)
{
U32 add_result;
U32 output;
add_result = (U32)a + (U32)b;
if(THOUSAND > add_result)
{
output = add_result;
}
else
{
output = SUM_DEFAULT;
}
return output;
}
Add_Two.h:
#ifndef ADD_TWO_H_
#define ADD_TWO_H_
typedef unsigned int U16;
typedef unsigned long int U32;
#define THOUSAND (U32)1000
#define SUM_DEFAULT (U32)25
U32 Add_Two(U16 a, U16 b);
#endif

採用された回答

Andrew Janke
Andrew Janke 2020 年 1 月 31 日
編集済み: Andrew Janke 2020 年 1 月 31 日
See this line where the function is actually defined in Add_Two.c?
Add_Two(U16 a, U16 b)
You need to add an explicit "`U32`" as its return type there.
U32 Add_Two(U16 a, U16 b)
  2 件のコメント
BABANBHAIGARI SHAFIULLAH
BABANBHAIGARI SHAFIULLAH 2020 年 1 月 31 日
Oh GOD, how did I miss that one ? It worked!!! Thanks a lot, @Andrew Janke.
Actually, I tried by removing the function decalaration from Add_Two.h file. It ran successfully, but still there was datatype warning. Now, its resolved.
Andrew Janke
Andrew Janke 2020 年 1 月 31 日
Heheh. Happens to the best of us.
You need to keep that function declaration in there: because it is returning something besides a regular int, you need the explicit prototype in there to tell the C compiler what type of value to expect coming back from the function.

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by