2009-06-14 12 views
1

bei der Erklärung der Suche nach XDrawString von X11 ist esWie kommt XDrawString nicht "const char *"?

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

Wie das sechste Argument kommen wird "char *" eingeben, statt "const char *"? Muss man die Zeichenkette zeichnen, um sie zu ändern? Ich habe viele Beispiele gesehen, bei denen Menschen in konstanten Strings arbeiten; Ist das unsicher?

Antwort

5

Entweder weil die Funktion schon seit const existiert oder weil diejenigen, die die API entworfen haben, Schwierigkeiten haben, mitzuhalten.

1

Ich habe noch nie etwas gesehen, was darauf hindeutet, dass XDrawString das übergebene Argument ändert. Diese Low-Level-X-APIs sind sehr alt und stammen aus der Mitte der 80er Jahre. Es ist sehr wahrscheinlich, dass die Leute ein bisschen weniger streng darin waren, konstante Argumente als solche zu markieren.

2

Auf meinen beiden Systemen (Mac OS X 10.4.11 und Ubuntu mit libx11-dev 2: 1.1.5-2ubuntu1.1) haben meine X11-Header es als const deklariert. Von /usr/include/X11/Xlib.h:

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

Und _Xconst ist #define ‚d const in X11/Xfuncproto.h zu sein.

+2

Dies scheint anzuzeigen, dass es für die Kompatibilität ist. –

Verwandte Themen