Использование M_PI со стандартом C89

Пойдите с пользовательским. MembershipProvider слишком тяжел для моих вкусов. Да возможно реализовать его упрощенным способом, но затем Вы добираетесь действительно неприятный запах из NotSupportedException или NotImplementedException.

С полностью пользовательской реализацией можно все еще использовать IPrincipal, IIdentity и FormsAuth. И действительно как трудно это, делают Вашу собственную страницу входа в систему и такой?

23
задан robintw 15 February 2011 в 18:34
поделиться

2 ответа

Соответствующий стандартный файл библиотеки math.h не только не требуется, но фактически не должен определять M_PI по умолчанию. В этом контексте «по умолчанию» означает, что M_PI должен определяться только с помощью специфических для компилятора приемов, чаще всего неопределенного поведения с использованием зарезервированных идентификаторов.

Просто определите константу самостоятельно (вы можете свободно использовать имя M_PI, но если вы хотите иметь возможность компилировать код с помощью несоответствующего компилятора, вы должны сначала проверить, что M_PI еще не определено) , Ради соглашения, не определяйте M_PI как что-либо кроме (приближение) пи.

38
ответ дан 29 November 2019 в 00:46
поделиться

Я не вижу, в чем здесь проблема; нет несовместимости между -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
8
ответ дан 29 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: