Почему XDrawString не принимает "const char *"?
Глядя на объявление для XDrawString от X11, это
int XDrawString(Display *display, Drawable d, GC gc,
int x, int y, char *string, int length);
Почему 6-й аргумент имеет тип "char *" вместо "const char *"? Требуется ли для изменения строки рисование строки? Я видел много примеров, когда люди переходили в постоянные строки; это небезопасно?
3 ответа
Либо потому что функция была вокруг с тех пор const
или потому что у тех, кто разработал API, есть проблемы с тем, чтобы не отставать.
В обеих моих системах (Mac OS X v10.4.11 и Ubuntu с libx11-dev 2:1.1.5-2ubuntu1.1) мои заголовки X11 объявлены как const
, От /usr/include/X11/Xlib.h
:
extern int XDrawString(
Display* /* display */,
Drawable /* d */,
GC /* gc */,
int /* x */,
int /* y */,
_Xconst char* /* string */,
int /* length */
);
А также _Xconst
является #define
должен быть const
в X11/Xfuncproto.h
,
Я никогда не видел ничего, что указывало бы на то, что XDrawString изменяет передаваемый ему аргумент. Эти низкоуровневые X API очень старые, начиная с середины 80-х годов. Вполне вероятно, что тогда люди были менее строгими в обозначении постоянных аргументов как таковых.