V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
autulin
V2EX  ›  C

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

  •  
  •   autulin · 2016-03-02 00:00:20 +08:00 · 1477 次点击
    这是一个创建于 3180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下载的一个 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

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

    ./incs/libusbi.h:#include <poll.h>
    ./incs/os.h:#include <sys/poll.h>
    autulin
        6
    autulin  
    OP
       2016-03-02 15:19:21 +08:00
    @hitmanx 明白了,非常感谢
    @Neveroldmilk
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:50 · PVG 12:50 · LAX 20:50 · JFK 23:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.