Output argument is not assigned on some execution paths for Embedded matlab function
17 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
For a single input u to the embedded matlab function using the following code:
if u>0
y=1;
end
if u<0
y=-1;
end
if u==0
y=0;
end
gives error: "output argument 'y' is not assigned on some execution paths."
I don't know why the codes above are not working. Instead, I have to use if...elseif...else structure.
0 Commenti
Risposte (3)
Cedric
il 11 Gen 2013
Modificato: Cedric
il 11 Gen 2013
Look at the following:
>> u = [1 2 3] ;
>> if u < 2, fprintf( 'OK\n' ) ; end
>> if u > 2, fprintf( 'OK\n' ) ; end
>> if u == 2, fprintf( 'OK\n' ) ; end
>> if u == [1 2 3], fprintf( 'OK\n' ) ; end
OK
>>
EDIT: Also, and the error might come from that..
>> [NaN < 0, NaN > 0, NaN == 0]
ans =
0 0 0
Testing equalty of arrays, or arrays/scalar, requires a little more work usually. Look up:
>> doc any
>> doc all
>> doc isnan
>> doc isequalwithequalnans
EDIT: in your case with the error, you should probably manage NaN cases. If M-Lint were indicating (as a tip) that the output arg. might not be assigned, I would guess that the array/scalar tests could be a cause.
EDIT: if you know that u is a scalar (this should be tested if you wanted to create a robust function) and not NaN, just build an if u>0, .. elseif u<0, .. else.. end conditional statement. It is better than your series of statements in the sense that it doesn't test conditions from statements below one whose condition was true.
Cheers,
Cedric
5 Commenti
Dr Yu Lu
il 21 Ott 2016
Have you fixed this? I have similar problem
4 Commenti
Stephen23
il 24 Ott 2017
Cause: if num_frames is less than one then segSNR is never defined.
Solution: put a dummy value at the start of the function, e.g. segSNR = [];
Tip: you should avoid using global variables.
Walter Roberson
il 24 Ott 2017
Your section
if (clean_length ~= Enhanced_length)
disp('Error: Both Speech Files must be same length.');
return
end
does not assign to some output variables. You can switch to error() instead of disp/return, or you can switch to assert() instead of disp/return, or you can assign outputs to all of the variables for that case.
Also, your segSNR is not assigned to unless at least one iteration of the for loop is done; the way you calculate num_frames it can come out less than 1.
Question: why are you overwriting all of segSNR on each iteration of the loop?
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!