我发现在头文件“gobjects.h”中声明了这样的跟随函数:
(它来自斯坦福便携式图书馆。整个图书馆的源代码和头文件可以在这里找到: https://github.com/cs50/spl/tree/master/c)
/*
* Function: getWidth
* Usage: width = getWidth(gobj);
* ------------------------------
* Returns the width of this object, which is defined to be the width of
* the bounding box.
*/
double getWidthGObject(GObject gobj);
让我感到困惑的是函数的名称是getWidthGObject
,但在注释块中它指定了用法,就好像名称是getWidth
一样。当我在自己的代码中调用此函数时,似乎两个名称都可以正常工作。只是为了澄清在此头文件中没有声明另一个名为getWidth
的函数。
所以,我的问题是,为什么我们可以用两个不同的名称来调用这个函数,而其中较短的一个似乎从未被定义过?
答案 0 :(得分:8)
getWidth
位于generic.h:
#define getWidth(arg) getWidthGeneric(sizeof arg, arg)
评论通常是过时的,但这看起来并不像这里的问题。 getWidthGeneric
最终在generic.c中呼叫getWidthGObject
。 arg
由...
va_list
:
double getWidthGeneric(int size, ...) {
...
type = getBlockType(arg);
if (endsWith(type, "GWindow")) {
return getWidthGWindow((GWindow) arg);
} else if (endsWith(type, "GObject")) {
return getWidthGObject((GObject) arg);
} else {
error("getWidth: Illegal argument type");
}
}