gpt4 book ai didi

c++ - 为什么要这样调用宏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:13 26 4
gpt4 key购买 nike

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

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

最佳答案

源代码一团糟,甚至无法编译。似乎 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 )。

关于c++ - 为什么要这样调用宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11721837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com