为什么XDrawString不接受“const char *”?

时间:2009-06-14 19:52:38

标签: c x11 const-char

从X11查看XDrawString的声明,它是

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

为什么第6个参数是“char *”而不是“const char *”?绘制字符串是否需要修改它?我见过许多人们传递常数字符串的例子;那不安全吗?

3 个答案:

答案 0 :(得分:5)

要么是因为函数在const之前就已存在,要么因为那些设计API的人在跟上时遇到了麻烦。

答案 1 :(得分: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 #defineconst中的X11/Xfuncproto.h

答案 2 :(得分:1)

我从未见过任何暗示XDrawString修改传递给它的参数的东西。这些低级X API非常陈旧,可以追溯到80年代中期。当时人们在标记常数参数时很可能不那么严格。