将头文件复制并粘贴到main.cpp会产生重新定义错误

时间:2016-10-18 16:58:24

标签: c++ mingw c-preprocessor c++14

#include <curses.h>
#include <Windows.h>

int main(){

    return -2;

}

编译时,没有错误。如果我交换#include <curses.h>#include <Windows.h>的排名,则会收到MOUSE_MOVED重新定义的错误(一次在curses.h,另一次在wincon.h - 这是由Windows.h包括在内。我猜wincon.h有一行类似于:

#ifndef MOUSE_MOVED
#define MOUSE_MOVED 2
#endif

但是curses.h没有,这就是为什么它取决于include指令的排序方式。另一方面,看看wincon.h我看不到这样的条件语句,但我发现很少在评论很少时跟踪头文件中定义的内容。

我主要担心的是,在curses.h之前包含Windows.h时,它编译得很好。为了了解这可能是什么原因,我复制并粘贴了curses.h的所有内容并将其放在与#include <curses.h>相同的位置,我对Windows.h做了同样的事情然后{{1 }}。令我惊讶的是,这又带来了wincon.h的错误。我所做的只是复制并粘贴标题的内容,这不是预处理器的作用吗?只需将include指令替换为标题的内容即可?为什么要做这样的事情会带来错误? (MinGW g ++ 6.1.0)

(我不能粘贴curses.h和Windows.h的所有内容,但如果需要,请粘贴a small download for curses can be found here

0 个答案:

没有答案