为什么用这种方式调用宏?

时间:2012-07-30 12:43:10

标签: c++

我最近读了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);

没问题。任何人都可以告诉我为什么?

1 个答案:

答案 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++;

globalstruct(请参阅Mike Seymour's comment)。