Если вы можете сойти с рук, static const
имеет много преимуществ. Он подчиняется принципам обычной области видимости, отображается в отладчике и в целом подчиняется правилам, которым подчиняются переменные.
Тем не менее, по крайней мере, в оригинальном стандарте C, на самом деле он не является константой. Если вы используете #define var 5
, вы можете написать int foo[var];
в качестве объявления, но вы не можете сделать это (кроме как в качестве расширения компилятора) с помощью static const int var = 5;
. Это не так в C ++, где версия static const
может использоваться везде, где может использоваться версия #define
, и я полагаю, что это также относится и к C99.
Однако никогда не называйте константу #define
строчными буквами. Она переопределит любое возможное использование этого имя до конца модуля перевода. Макросконстанты должны находиться в том, что фактически является их собственным пространством имен, которое традиционно состоит из заглавных букв, возможно, с префиксом.
Я склонен придерживаться второй идеи. простая привязка будет просто проверять, находится ли центральная точка круга, который вы перетаскиваете, в пределах некоторого допуска круга на сетке, и если да, то привязать их.