从X11查看XDrawString的声明,它是
int XDrawString(Display *display, Drawable d, GC gc,
int x, int y, char *string, int length);
为什么第6个参数是“char *”而不是“const char *”?绘制字符串是否需要修改它?我见过许多人们传递常数字符串的例子;那不安全吗?
答案 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
#define
为const
中的X11/Xfuncproto.h
。
答案 2 :(得分:1)
我从未见过任何暗示XDrawString修改传递给它的参数的东西。这些低级X API非常陈旧,可以追溯到80年代中期。当时人们在标记常数参数时很可能不那么严格。