Проблема заключается не в отсутствующем объявлении функции (который отсутствует, так как вы включили
).
В этой проблеме отсутствует информация об отладке для sqrt
, которую вы фактически используете. Без этой информации об отладке GDB не знает, какой тип параметра перейти на sqrt()
и что он возвращает.
Вы можете получить требуемую информацию об отладке во многих дистрибутивах Linux, установив пакет libc-debuginfo. Вот что я вижу в такой системе:
gdb -q ./a.out
Reading symbols from /tmp/a.out...done.
(gdb) b main
Breakpoint 1 at 0x400558: file t.c, line 6.
(gdb) r
Breakpoint 1, main () at t.c:6
6 printf("sqrt(3): %f\n", sqrt(3));
(gdb) p sqrt
$1 = {} 0x7ffff7b7fb50 <__sqrt>
Примечание: «no debug info»
(gdb) p sqrt(3)
$2 = 0
(gdb) p sqrt(3.0)
$3 = 0
Примечание: соответствует вашему поведению. Что sqrt
функции do имеют информацию об отладке?
(gdb) info func sqrt
All functions matching regular expression "sqrt":
File ../sysdeps/x86_64/fpu/e_sqrt.c:
double __ieee754_sqrt(double);
File s_csqrt.c:
complex double __csqrt(complex double);
File ../sysdeps/x86_64/fpu/e_sqrtf.c:
float __ieee754_sqrtf(float);
File w_sqrtf.c:
float __sqrtf(float);
File s_csqrtf.c:
complex float __csqrtf(complex float);
File ../sysdeps/i386/fpu/e_sqrtl.c:
long double __ieee754_sqrtl(long double);
File w_sqrtl.c:
long double __sqrtl(long double);
File s_csqrtl.c:
complex long double __csqrtl(complex long double);
File ../sysdeps/ieee754/dbl-64/mpsqrt.c:
void __mpsqrt(mp_no *, mp_no *, int);
File w_sqrt.c:
double __sqrt(double);
(gdb) p __sqrt
$4 = {double (double)} 0x7ffff7b7fb50 <__sqrt>
Примечание: __sqrt
имеет тот же адрес, что и sqrt
, но GDB знает его тип!
(gdb) p __sqrt(3)
$5 = 1.7320508075688772
(gdb) p __sqrt(3.0)
$6 = 1.7320508075688772
Можно резонно утверждать, что это ошибка в GDB. Не стесняйтесь создавать его в bugzilla .
Обзор множества паттернов проектирования можно найти в Википедии. Там также упоминается, какие паттерны упоминаются в GoF. Я обобщу их здесь и постараюсь привести как можно больше реализаций паттернов, встречающихся как в Java SE, так и в Java EE API.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath. XPathFactory#newInstance()
java.lang.StringBuilder#append()
(несинхронизированный)java.lang.StringBuffer#append()
(синхронизированный)java. nio.ByteBuffer#put()
(также на CharBuffer
, ShortBuffer
, IntBuffer
, LongBuffer
, FloatBuffer
и DoubleBuffer
)javax. swing.GroupLayout.Group#addComponent()
java.lang.Appendable
java.util.stream.Stream.Builder
java.util.Calendar#getInstance()
java. util.ResourceBundle#getBundle()
java.text.NumberFormat#getInstance()
java.nio.charset.Charset#forName()
java.net.URLStreamHandlerFactory#createURLStreamHandler(String)
(Возвращает синглтонный объект для протокола)java.util.EnumSet#of()
javax.xml.bind. JAXBContext#createMarshaller()
и другие подобные методыjava.lang. Object#clone()
(класс должен реализовать java.lang.Cloneable
)java. lang.Runtime#getRuntime()
java.awt.Desktop#getDesktop()
java.lang. System#getSecurityManager()
java. util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(возвращает Reader
)java. io.OutputStreamWriter(OutputStream)
(возвращает Writer
)javax.xml.bind.annotation.adapters. XmlAdapter#marshal()
и #unmarshal()
new LinkedHashMap(LinkedHashSet, List)
, который возвращает неизменяемую связанную карту, которая не клонирует элементы, а использует их. Методы java.util.Collections#newSetFromMap()
и singletonXXX()
тем не менее приближаются к этому. java.awt.Container#add(Component)
(практически во всем Swing таким образом)javax.faces.component. UIComponent#getChildren()
(практически во всем JSF UI)java. io.InputStream
, OutputStream
, Reader
и Writer
имеют конструктор, принимающий экземпляр того же типа. java.util.Collections
, the checkedXXX()
, synchronizedXXX()
and unmodifiableXXX()
методы. javax.servlet.http.HttpServletRequestWrapper
и HttpServletResponseWrapper
javax.swing.JScrollPane
javax. faces.context.FacesContext
, он внутренне использует среди прочих абстрактные/интерфейсные типы LifeCycle
, ViewHandler
, NavigationHandler
и многие другие без того, чтобы об этом беспокоился конечный пользователь (которые, однако, можно переопределить путем инъекции). javax.faces.context.ExternalContext
, который внутренне использует ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
и т.д. java.lang. Integer#valueOf(int)
(также на Boolean
, Byte
, Character
, Short
, Long
и BigDecimal
)java. lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
(explanation here)javax.inject.Inject
(explanation here)javax.persistence. PersistenceContext
java.lang.Runnable
javax.swing. Action
java.util.Pattern
java.text.Normalizer
java. text.Format
javax.el.ELResolver
java.util.Iterator
(таким образом, среди прочих также java.util.Scanner
!). java.util.Enumeration
java. util.Timer
(all scheduleXXX()
methods)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
(the invokeXXX()
and submit()
methods)java. util.concurrent.ScheduledExecutorService
(все scheduleXXX()
методы)java.lang.reflect.Method#invoke()
java. util.Date
(это делают методы сеттера, Date
внутренне представлена значением long
)java.io. Serializable
javax.faces.component.StateHolder
java. util.Observer
/java.util.Observable
(в реальном мире используется редко)java.util.EventListener
(практически во всем Swing)javax. servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax. faces.lifecycle.LifeCycle#execute()
(управляется FacesServlet
, поведение зависит от текущей фазы (состояния) жизненного цикла JSF)java.util.Comparator#compare()
, выполняемый среди прочих Collections#sort()
. javax.servlet.http.HttpServlet
, методы service()
и все doXXX()
принимают HttpServletRequest
и HttpServletResponse
и реализатор должен их обработать (а не получить их как переменные экземпляра!). javax.servlet.Filter#doFilter()
java. io.InputStream
, java.io.OutputStream
, java.io.Reader
and java.io.Writer
. java.util.AbstractList
, java.util.AbstractSet
и java.util.AbstractMap
. javax.servlet.http.HttpServlet
, все методы doXXX()
по умолчанию отправляют в ответ ошибку HTTP 405 "Method Not Allowed". Вы можете реализовать ни один из них или любой другой. Наблюдатель
, Наблюдатель
) ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
are not adapters; they are actually Null Objects. Poor naming choice by Sun.BufferedInputStream
can decorate other streams such as FilterInputStream
)java.lang.Runtime#getRuntime()
is SingletonButtonGroup
for Mediator patternAction
, AbstractAction
may be used for different visual representations to execute same code -> Command patternand many more I guess
clone ()
можно использовать для для этой цели. Шаблон «Абстрактная фабрика» используется в разных местах.
Например, DatagramSocketImplFactory
, PreferencesFactory
. Их гораздо больше - поищите в документации Javadoc интерфейсы, в названии которых есть слово «Factory».
Также существует довольно много экземпляров шаблона Factory.
Even though I'm sort of a broken clock with this one, Java XML API uses Factory a lot. I mean just look at this:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...and so on and so forth.
Additionally various Buffers (StringBuffer, ByteBuffer, StringBuilder) use Builder.
RMI основан на прокси.
Можно указать один для большинства из 23 шаблонов в GoF:
Я не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
КонтейнерЯ не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
КонтейнерЯ не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
ExternalContext действует как фасад для выполнения файлов cookie, области сеанса и аналогичных операций.Я не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
ExternalContext действует как фасад для выполнения файлов cookie, области сеанса и аналогичных операций.Я не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
и т. д.Я не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
и т. д.Я не могу вспомнить примеры на Java для 10 из 23, но я посмотрю, смогу ли я сделать лучше завтра. Вот для чего нужна правка.
Я не могу вспомнить примеры на Java на 10 из 23, но я посмотрю, смогу ли я завтра добиться большего. Вот для чего нужна правка.
Я не могу вспомнить примеры на Java на 10 из 23, но я посмотрю, смогу ли я завтра добиться большего. Вот для чего нужна правка.