Необходимо ли быть в состоянии использовать нежадные кванторы, конкретно *?. Вы собираетесь, вероятно, хотеть следующее:
Pattern MY_PATTERN = Pattern.compile("\\[(.*?)\\]");
Это даст Вам шаблон, который будет соответствовать Вашей строке и помещать текст в квадратных скобках в первой группе. Взгляните на документация API Шаблона для получения дополнительной информации.
Для извлечения строки Вы могли использовать что-то как следующее:
Matcher m = MY_PATTERN.matcher("FOO[BAR]");
while (m.find()) {
String s = m.group(1);
// s now contains "BAR"
}
Здесь нет гениальных идей, но afaik errno
может быть реализован через вызовы функций, чтобы сделать возможными потокобезопасные реализации стандартной библиотеки. Я не думаю, что ленивые запросы к FPU - хорошая идея: как избежать несогласованности в таких ситуациях:
errno
errno
Должен ли вызов __ errno ()
сбрасывать флаги или нет?
Согласно стандарту, должно ли errno
устанавливаться математическими функциями, определяется значением math_errhandling
(в частности, math_errhandling & MATH_ERRNO
).
Что бы я хотел do - сделать сообщение об ошибке необязательным через директивы препроцессора и позволить программисту установить значение math_errhandling
во время компиляции. Это означало бы, что математические функции не могут быть скомпилированы статически заранее, а должны находиться в заголовке, что в любом случае может быть хорошей идеей, чтобы позволить компиляторам без оптимизации времени компоновки встраивать эти функции.
Я бы сделал сообщение об ошибке необязательным с помощью директив препроцессора и позволил бы программисту установить значение math_errhandling
во время компиляции. Это означало бы, что математические функции не могут быть скомпилированы статически заранее, а должны находиться в заголовке, что в любом случае может быть хорошей идеей, чтобы позволить компиляторам без оптимизации времени компоновки встраивать эти функции.
Я бы сделал сообщение об ошибке необязательным с помощью директив препроцессора и позволил бы программисту установить значение math_errhandling
во время компиляции. Это означало бы, что математические функции не могут быть скомпилированы статически заранее, а должны находиться в заголовке, что в любом случае может быть хорошей идеей, чтобы позволить компиляторам без оптимизации времени компоновки встраивать эти функции.
Здесь вы получаете довольно хороший анализ того, почему весь механизм errno
так неудовлетворителен. Вы также можете найти аналогичный анализ в «Стандартной библиотеке C» Кернигана.
Функциональная форма errno
также необходима для поточно-ориентированных реализаций, где разные потоки имеют отдельные значения ошибок, к которым осуществляется доступ через поток -specific errno
.
Вероятно, ваш макрос должен заключаться в круглые скобки для безопасности:
#define errno (*__errno())
More a comment than an answer, but without code formatting it would not be understandable.
If you check lazily the FPU flags, how would you have the correct behavior here (the math functions are special in that they are guaranteed not to modify errno when there is no problem)?
errno = 0;
x = acos(y);
z = <exp>;
if (errno != 0) {
/* can't come here even if y is a valid argument but <exp> modified the flags if it didn't call any functions */
}