Препроцессор заменит все экземпляры токена ASPECT_RATIO
, которые появляются в коде, фактическим токеном 1.653
... таким образом, компилятор никогда не увидит токен ASPECT_RATIO
.К тому времени, когда он компилирует код, он видит только буквальный токен 1.653
, который был заменен препроцессором.
По сути, «проблема», с которой вы столкнетесь при таком подходе, заключается в том, что ASPECT_RATIO не будетрассматривается компилятором как символ, то есть в отладчике и т. д. вы не можете запросить значение ASPECT_RATIO, как если бы оно было переменной.Это не значение, которое будет иметь адрес памяти, который может иметь static const int
(я говорю «может», потому что оптимизирующий компилятор может решить действовать как препроцессор и оптимизировать необходимость явного адреса памяти длясохранить постоянное значение, вместо этого просто подставляя буквальное значение везде, где оно появляется в коде).В большем макросе функции он также не будет иметь адрес инструкции, как в реальной функции C / C ++, поэтому вы не можете устанавливать точки останова внутри макроса функции.Но в более общем смысле я не уверен, что назвал бы это «проблемой», если вы не намеревались использовать макрос в качестве символа отладки и / или не устанавливали точки прерывания отладки внутри вашего макроса.В противном случае макрос выполняет свою работу.