我最近读了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);
没问题。任何人都可以告诉我为什么?
答案 0 :(得分:1)
源代码完全混乱,甚至不会编译。似乎global.h
已在版本2.2.2和当前版本2.6.3之间进行了更改,但没有在fetch/fetchPipe.h
中解决这些更改。另请查看global.cc
中的include语句:
#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++;
和global
是struct
(请参阅Mike Seymour's comment)。