Пойдите с пользовательским. MembershipProvider слишком тяжел для моих вкусов. Да возможно реализовать его упрощенным способом, но затем Вы добираетесь действительно неприятный запах из NotSupportedException или NotImplementedException.
С полностью пользовательской реализацией можно все еще использовать IPrincipal, IIdentity и FormsAuth. И действительно как трудно это, делают Вашу собственную страницу входа в систему и такой?
Соответствующий стандартный файл библиотеки math.h
не только не требуется, но фактически не должен определять M_PI
по умолчанию. В этом контексте «по умолчанию» означает, что M_PI
должен определяться только с помощью специфических для компилятора приемов, чаще всего неопределенного поведения с использованием зарезервированных идентификаторов.
Просто определите константу самостоятельно (вы можете свободно использовать имя M_PI
, но если вы хотите иметь возможность компилировать код с помощью несоответствующего компилятора, вы должны сначала проверить, что M_PI
еще не определено) , Ради соглашения, не определяйте M_PI
как что-либо кроме (приближение) пи.
Я не вижу, в чем здесь проблема; нет несовместимости между -std = c89 и _USE_MATH_DEFINES, один определяет, какой язык компилятор компилирует, другой определяет, какие части math.h будут включены.
Те части, которые включены, не определены как часть стандартной библиотеки ISO C , но это не то же самое, что не быть стандартным языком C, язык и библиотека являются отдельными объектами в C. Он не менее совместим с C89, чем если бы вы определили свои собственные макросы в своем собственном заголовке.
Однако я бы предложил, чтобы вы определяли макрос в командной строке, а не в коде:
-std=c89 -D_USE_MATH_DEFINES
Если вы когда-либо встречали реализацию math.h, которая не определяет M_PI, то это легко исправить без модификации кода, аналогично используя макросы, определенные в командной строке:
-std=c89 -DM_PI=3.14159265358979323846