2

我最近阅读了 larbin 源代码。但我有一个疑问。我在 global.h 文件中定义了全局类,在这个文件的末尾有一个像这样的宏:

#define setPoll(fds, event) \
global::pollfds[global::posPoll].fd = fds; \
global::pollfds[global::posPoll].events = event; \
global::posPoll++

但是在 fetch/fetchPipe.cc 文件中,像这样调用这个宏:

global::setPoll(n, POLLOUT);

问题是为什么要使用 global:: 来调用这个宏?我认为使用

setPoll(n, POLLOUT);

没关系。任何机构都可以告诉我为什么?

4

1 回答 1

1

源代码是一团糟,它甚至不会编译。似乎global.h在 2.2.2 版和当前 2.6.3 版之间发生了变化,但没有解决fetch/fetchPipe.h. 还可以查看以下包含的语句global.cc

#include <iostream.h> // iostream.h?
#include <unistd.h>   // twice, see below
#include <errno.h>
#include <string.h>   // mixing C++ and C libraries
#include <sys/types.h>
#include <unistd.h>
    ...

此代码已过时,不是标准 C++。还有其他几件事是错误的。但回到你的问题:是的,setPoll(n, POLLOUT);应该足够了。使用global::setPoll不会导致错误,因为这将扩展为

global::global::pollfds[global::posPoll].fd = fds;
global::pollfds[global::posPoll].events = event;
global::posPoll++;

并且globalstruct(参见Mike Seymour 的评论)。

于 2012-07-30T13:05:44.007 回答