关于 Windows.h 和 WinSock2.h 重定义 个人解决方案

abeyy2013 2011-09-22 01:43:40
我的程序如下:
#include <Windows.h>
#include <WinSock2.h>

void main()
{
}

这样编译会报一堆错误,详细原因看这里:http://blog.csdn.net/freefalcon/article/details/1374733


#include <WinSock2.h>
#include <Windows.h>

void main()
{
}

反过来就不会``原因见上面的连接


本人觉得上面连接所说的方法有点麻烦``、
本人方法是 在 WinSock2.h 头文件里的开头加上

#ifndef _INC_WINDOWS /* 防止先 包含 windows.h 再 包含 winsock2.h 引发的重定义 */


WinSock2.h 头文件里的结尾加上 #endif /* _INC_WINDOWS */


然后保存 WinSock2.h 文件```以后用到就不用麻烦了``

这样无论先 包含 Windows.h 还是 WinSock2.h 都不会出编译错误``

以上如果有什么不对的``望各位指正
...全文
324 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
abeyy2013 2011-09-22
  • 打赏
  • 举报
回复
这样的话``

在用到 WinSock2.h 的头文件 的地方 按如下处理``就不用修改sdk了

#ifndef _INC_WINDOWS
#include <WinSock2.h>
#endif
5t4rk 2011-09-22
  • 打赏
  • 举报
回复
不建议修改系统的文件

LZ

同意
就想叫yoko 2011-09-22
  • 打赏
  • 举报
回复
1楼说的很对
你改了SDK的话
1。 容易改出错, 导致其他程序出现问题
2. 工程在别的机器上就不可用了
叶落寒山 2011-09-22
  • 打赏
  • 举报
回复
最好不要修改系统的头文件。就采用你说的第二种方式就好
jackyjkchen 2011-09-22
  • 打赏
  • 举报
回复
Windows自动包含了Winsock,所以会有问题

而Winsock2自动包含了Windows

所以我的做法是,既然使用了Winsock2,就隐式包含了windows,不需要再手动了包含了,没意义

手动改sdk不可取,你换台机器怎么办?你把源码给别人用怎么办?

这个问题,你可以上msdn提交给M$,看他们可不可以更优雅的解决。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧