从 X11 看 XDrawString 的声明,它是
int XDrawString(Display *display, Drawable d, GC gc,
int x, int y, char *string, int length);
为什么第 6 个参数是类型“char *”而不是“const char *”?绘制字符串需要修改它吗?我见过很多人们传递常量字符串的例子。那不安全吗?
从 X11 看 XDrawString 的声明,它是
int XDrawString(Display *display, Drawable d, GC gc,
int x, int y, char *string, int length);
为什么第 6 个参数是类型“char *”而不是“const char *”?绘制字符串需要修改它吗?我见过很多人们传递常量字符串的例子。那不安全吗?
要么是因为该功能之前就已经存在,要么是const
因为设计 API 的人难以跟上。
在我的两个系统(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
_const
X11/Xfuncproto.h
我从未见过任何建议 XDrawString 修改传递给它的参数。那些低级 X API 非常古老,可以追溯到 80 年代中期。很可能当时人们在标记不变的论点时不太严格。