Почему XDrawString не принимает "const char *"? - PullRequest
1 голос
/ 14 июня 2009

глядя на объявление для XDrawString от X11, оно

int XDrawString(Display *display, Drawable d, GC gc,
                int x, int y, char *string, int length);

Почему шестой аргумент имеет тип "char *" вместо "const char *"? Требуется ли для изменения строки рисование строки? Я видел много примеров, когда люди переходили в постоянные строки; это небезопасно?

Ответы [ 3 ]

5 голосов
/ 15 июня 2009

Либо потому, что эта функция существовала до const, либо потому, что у тех, кто разработал API, проблемы с поддержанием работы.

2 голосов
/ 15 июня 2009

В обеих моих системах (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.

1 голос
/ 15 июня 2009

Я никогда не видел ничего, что указывало бы на то, что XDrawString изменяет передаваемый ему аргумент. Эти низкоуровневые X API очень старые, начиная с середины 80-х годов. Вполне вероятно, что тогда люди были менее строгими в обозначении постоянных аргументов как таковых.

...