2009-06-14 27 views
1

尋找報關從X11 XDrawString,它是XDrawString如何不接受「const char *」?

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

怎麼來的第六參數的類型 「的char *」,而不是 「爲const char *」?繪製字符串是否需要修改它?我看過很多例子,人們通過不斷的字符串傳遞;那是不安全的?

回答

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倒是要在X11/Xfuncproto.hconst

+2

這似乎表明它是爲了兼容性。 – 2009-06-14 20:39:15