Вы должны заключить расширения макросов в круглые скобки как:
#define Meters2Pixels(meters) ((float)meters*PixelsPerMeter)
#define Pixels2Meters(pixels) ((float)pixels/PixelsPerMeter)
Препроцессор C / C ++ выполняет слепую замену. Без скобок x1
будет вычислено как:
float x1 = ( mHeight / (float)9.81*40.0 ) * _windPower;
, которая делит mHeight
на 9.81
и затем умножает результат на 40.0
. Чего не хочешь. Вы хотите, чтобы mHeight
было разделено на произведение 9.81
и 40.0
, отсюда и скобки.
вы всегда можете увидеть, как ваши макросы расширяются до того, как ваш файл отправляется на компиляцию, используя параметр -E
g++
как:
g++ -Wall -E myfile.cpp
EDIT:
Также лучше заключить параметр макроса в круглые скобки, это защитит вас, если вы передадите выражение (например, скажем Meters2Pixels(foo + 2)
:
#define Meters2Pixels(meters) ((float)(meters)*PixelsPerMeter)
#define Pixels2Meters(pixels) ((float)(pixels)/PixelsPerMeter)