2009-06-14 4 views
1

глядя на декларации для XDrawString от X11, этоПочему XDrawString не принимает «const char *»?

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

Как получилось, шестой аргумент типа «символ *» вместо «сопзЬ символ *»? Требуется ли рисование строки для ее изменения? Я видел множество примеров, когда люди переходят в постоянные строки; это небезопасно?

ответ

5

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

1

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

2

На обеих моих системах (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 «d быть в X11/Xfuncproto.hconst.

+2

Это, по-видимому, указывает на совместимость. –

Смежные вопросы