1

从 X11 看 XDrawString 的声明,它是

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

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

4

3 回答 3

5

要么是因为该功能之前就已经存在,要么是const因为设计 API 的人难以跟上。

于 2009-06-14T20:13:28.070 回答
2

在我的两个系统(Mac OS X v10.4.11 和带有 libx11-dev 2:1.1.5-2ubuntu1.1 的 Ubuntu)上,我的 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_constX11/Xfuncproto.h

于 2009-06-14T20:33:26.977 回答
1

我从未见过任何建议 XDrawString 修改传递给它的参数。那些低级 X API 非常古老,可以追溯到 80 年代中期。很可能当时人们在标记不变的论点时不太严格。

于 2009-06-14T20:21:51.483 回答