Why a condition like If (~Input) changes to a complex condition with ternary operator ?
8 次查看(过去 30 天)
显示 更早的评论
When I am trying to generate C code with Embedded Coder, the following condition
if (~Input)
is converted to the following ugly condition
if ((boolean_T)((int32_T)((Input ? ((int32_T)1) : ((int32_T)0)) ^ 1))) {
Is there any option to change in the setting to avoid this type of code being generated?
Is there a reason why this code would be generated instead of a simpler alternative?
The same code is generated if I change the condition to:
if (false == Input)
4 个评论
Walter Roberson
2022-12-1
Bleh, that code is equivalent to
xor(1, Input ~= 0)
which is pretty ugly.
What happens if you change the condition to
if (Input == 0)
?
采纳的回答
更多回答(1 个)
Les Beckham
2022-12-1
So, the original condition if (~Input) is C code and not Matlab code? If so, you should use the logical not operator which is ! in C instead of ~ (as it is in Matlab).
~false in C will be 0xFFFFFFFE (or similar) and the ugly ternary expression coerces that back to a 1.
BTW - please post comments as comments rather than answers.
3 个评论
Les Beckham
2022-12-1
I thought that too until OP said "The class of variable "Input" is "boolean_T". Perhaps he meant in the generated code. I meant in the original Matlab code when I asked that. Probably a misunderstanding.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Deployment, Integration, and Supported Hardware 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!