Использование макроса DEFINE () в выражениях - PullRequest
2 голосов
/ 20 апреля 2011

Так я определил ..

#define RADIAN(x) x*3.14159265f/180.0f

, а затем использовал его так:

RADIAN(theta-90)

Моя программа постоянно давала мне неправильные результаты, мне потребовалось несколько часов, чтобы понять, что между приведенным выше утверждением и приведенным ниже утверждением существует огромная разница.

RADIAN((theta-90))

Теперь моя программа работает отлично. Почему первое утверждение неверно?

Ответы [ 4 ]

7 голосов
/ 20 апреля 2011

#define делает просто текстовую подстановку, поэтому RADIAN(theta-90) был действительно theta-90*3.14159265f/180.0f, что, очевидно, было не тем, что вы имели в виду. Попробуйте

#define RADIAN(x) ((x)*3.14159265f/180.0f)

вместо.

4 голосов
/ 20 апреля 2011

Largery Macro делает текстовую замену, поэтому

RADIAN(theta-90) 

расширяется до:

theta - 90* 3.14159265f/180.0f  

который из-за приоритета оператора оценивает как:

theta - (90* 3.14159265f/180.0f)  
2 голосов
/ 20 апреля 2011

Все ответы выше верны.Однако, одно замечание еще не было сделано ...

Это C ++, а не C. Прекратите использовать макросы препроцессора.

0 голосов
/ 20 апреля 2011

Это связано с тем, что в первом случае X будет заменено на (theta-90), поэтому ваша функция будет иметь значение:

theta - 90* 3.14159265f/180.0f
...