vs2008 编译选项showIncludes 应用一例
来源:互联网 发布:网络药品销售 编辑:程序博客网 时间:2024/05/17 16:42
开门见山,直接上错误信息——
1>d:\test\s_host.h(20) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)
1>d:\test\s_host.h(20) : error C2059: 语法错误 : “.”
1>d:\test\s_host.h(20) : error C2059: 语法错误 : “public”
1>d:\test\s_host.h(21) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\test\s_host.h(21) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
而第20行只是声明一个名为s_host的类,第21行只有一个左花括号而已。如下所示:
查了一下,才知s_host原来在inaddr.h与Winsock2.h中已经被define定义,而这里我又重新定义s_host为类,所以会出一堆莫名的错。若那两个文件不是define而是一般的类或是变量定义的话,则会直接报标识符重复定义吧。接下来有两条路可以选择,一是直接修改我定义的类名;二是想办法让我的编译器不要包含inaddr.h与Winsock2.h(前提是项目中并没有使用这两个头文件)。
如上一看似是最简单直接的方法,我也尝试了,确是OK;下方接着讨论二的具体做法。
通过如上的办法,查明了winsock2.h和inaddr.h在afxwin.h是通过_WINSOCK2API_,_WS2IPDEF_,__IPHLPAPI_H__来控制是否包含的(#ifndef)。
下面就只要在编译选项(预处理器定义)中加入这三个define,就可以阻止winsock2.h和inaddr.h的包含。如下图:
【参考】:http://sun3eyes.blog.163.com/blog/static/1070797922012872528166/(博主:太阳三只)
1>d:\test\s_host.h(20) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)
1>d:\test\s_host.h(20) : error C2059: 语法错误 : “.”
1>d:\test\s_host.h(20) : error C2059: 语法错误 : “public”
1>d:\test\s_host.h(21) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\test\s_host.h(21) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
而第20行只是声明一个名为s_host的类,第21行只有一个左花括号而已。如下所示:
class s_host : public CDialog //line20{ //line21 //......};
查了一下,才知s_host原来在inaddr.h与Winsock2.h中已经被define定义,而这里我又重新定义s_host为类,所以会出一堆莫名的错。若那两个文件不是define而是一般的类或是变量定义的话,则会直接报标识符重复定义吧。接下来有两条路可以选择,一是直接修改我定义的类名;二是想办法让我的编译器不要包含inaddr.h与Winsock2.h(前提是项目中并没有使用这两个头文件)。
如上一看似是最简单直接的方法,我也尝试了,确是OK;下方接着讨论二的具体做法。
首先,我的项目中并没有显式包含inaddr.h与Winsock2.h,原来啊,mfc应用中大多会包含的afxwni.h中包含了这两个头文件。
修改如上选项(showIncludes)为Yes后,编译时就会输出如下类似的信息,而且用缩进来指示嵌套包含文件,每个嵌套级别使用一个空格。
Note: including file: d:\temp\1.h
Note: including file: d:\temp\2.h通过如上的办法,查明了winsock2.h和inaddr.h在afxwin.h是通过_WINSOCK2API_,_WS2IPDEF_,__IPHLPAPI_H__来控制是否包含的(#ifndef)。
#ifndef _WINSOCK2API_#ifdef _WINSOCKAPI_#error MFC requires use of Winsock2.h#endif#include <winsock2.h>#endif#ifndef _WS2IPDEF_#include <ws2ipdef.h>#endif#ifndef __IPHLPAPI_H__#include <iphlpapi.h>#endif
下面就只要在编译选项(预处理器定义)中加入这三个define,就可以阻止winsock2.h和inaddr.h的包含。如下图:
【参考】:http://sun3eyes.blog.163.com/blog/static/1070797922012872528166/(博主:太阳三只)
- vs2008 编译选项showIncludes 应用一例
- vs2008 showIncludes命令的使用
- C++ VS2008编译选项
- C++ VS2008编译选项
- vs2008静态编译选项
- VS2008静态编译配置选项的位置
- VS2008中影响exe大小和速度的编译选项
- SQLite学习(一) - VS2008编译SQLite3070602
- Live555分析(一):VS2008编译
- gcc/g++编译优化选项(一)
- Xcode 编译选项详解(一)
- VS2008项目设置选项
- VS2008项目设置选项
- VS2008中影响exe大小和速度的全部编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- folly源码分析(1) - Conv.h
- union和union all有什么不同
- Python_Kivy_问题总结
- BitBlt和StretchBlt的区别
- folly源码分析(2)- ProducerConsumerQueue.h
- vs2008 编译选项showIncludes 应用一例
- 万内回文素数函数版--------参考后
- 判断素数
- 检查软件版本运行时提示丢失 msvcr100d.dll
- 在 visual studio 2008 express 中配置 OpenGL 开发环境
- folly源码分析(3)- ThreadLocalPtr
- UI选中界面代码实现
- WPF程序同样的代码在WIN7和XP下结果不一样?
- UI选框实现图示