Why a condition like If (~Input) changes to a complex condition with ternary operator ?
10 ビュー (過去 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!