#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)