Почему я не могу сохранить в переменной результат возврата логического выражения в коде C? - PullRequest
0 голосов
/ 23 ноября 2018

У меня странное поведение небольшого куска кода C.Я хочу сохранить результат логического выражения в переменной, но он, похоже, не работает.

После кода:

 #define rtCP_Constant_Value_fklq (uint8_t) 1 //Simulink const
 #define rtCP_Constant_Value (uint8_t) 0 //Simulink const

 uint16_t rtb_tobit;
 volatile unsigned char rtb_y;
 uint8_t asr_ena_=14;
 rtb_tobit = (1 << rtCP_Constant_Value_fklq);

 uint8_t temp = ((uint8_t)rtb_tobit) & asr_ena_;
 rtb_y = (temp !=(rtCP_Constant_Value));

Я протестировал этот фрагмент кода с двумя компиляторами,Renesas SH 9_4_1 и gcc-arm non-eabi на доске Nucleo eval.В обоих случаях переменная rtb_y всегда равна нулю.Отладчик показывает, что выражение (temp !=(rtCP_Constant_Value)) верно, но я не могу понять почему, переменная rtb_y всегда равна нулю.

Может кто-нибудь объяснить мне, почему?Это странное поведение из-за стандартов C, которые я использовал?

1 Ответ

0 голосов
/ 23 ноября 2018

Это действительно плохая идея использовать макросы так, как вы их используете.Вы должны быть очень осторожны, чтобы использовать круглые скобки в нужных местах.Также вы не должны включать в себя;в макросе.Например, это лучше:

#define rtCP_Constant_Value_fklq ((uint8_t) 1) //Simulink const

Однако на самом деле невозможно предложить больше помощи по вашему вопросу, чем этот, потому что ваш пример не скомпилируется из-за включения;.Если вы обновите вопрос с помощью кода, который компилируется, возможно, вам удастся помочь в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...