请问在 VS2015 中,为什么我套了#ifndef...#endif 之后还是出现宏重定义错误?

2016-03-02 00:00:20 +08:00
 autulin

下载的一个 demo 程序,应该是没有问题的,然而导入了 VS2015 之后,编译始终报错

比如这样的代码:
#ifndef _WIN_POLL_H
#define _WIN_POLL_H
#define POLLIN 0x001
#define POLLPRI 0x002
#define POLLOUT 0x004

struct pollfd
{
    int fd;                 // File Descriptor to poll
    short int events;       //Types of events poller takes care about
    short int revents;      //Types of events that actualy occured
};
#endif

编译之后 POLLIN POLLPRI POLLOUT struct pollfd 全都报宏重定义的错,并且我全局搜索也并没有搜索到有重定义的地方

有过经验的同学来告诉下咋回事?

工程文件: http://pan.baidu.com/s/1kTSY5Hd

1506 次点击
所在节点    C
6 条回复
Neveroldmilk
2016-03-02 08:27:24 +08:00
你自己在 POLLIN 、 POLLPRI 和 POLLOUT 前面再加个#ifdef 检测不就完了。
kevinzhwl
2016-03-02 09:48:47 +08:00
不在工程内的文件,可以被 include 但不能被搜索到。
autulin
2016-03-02 11:24:59 +08:00
@Neveroldmilk 你是说再次检测 POLLIN 这样的宏定义有无被定义吗?那这个跟开头的#ifndef _WIN_POLL_H #define _WIN_POLL_H 有什么区别呢?
autulin
2016-03-02 11:25:32 +08:00
@kevinzhwl 我是整个工程的文件夹搜索的
hitmanx
2016-03-02 13:17:49 +08:00
POLLIN 应该是在系统的 poll.h 里定义了,你工程里又重新定义了.解决方法同 1 楼

./incs/libusbi.h:#include <poll.h>
./incs/os.h:#include <sys/poll.h>
autulin
2016-03-02 15:19:21 +08:00
@hitmanx 明白了,非常感谢
@Neveroldmilk

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/260369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX