Почему 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-х годов. Вполне вероятно, что тогда люди были менее строгими в обозначении постоянных аргументов как таковых.

Другие вопросы по тегам