1. static inline int vasprintf 中,报错: 在"inline"之后应输入"("的错误:
原因:Visual Studio2013中的C编译器还不支持inline语法,在VC中,仍然需要用微软自己定义的__inline,而尚不支持inline,尽管inline在C++中是支持的。
解决:添加代码:
#ifdef _MSC_VER
#define inline __inline
#endif
2. access(unique_filename, F_OK) 报错,F_OK未识别的标识符;
原因:
在Linux下,access函数的声明在<unistd.h>文件中,声明如下:
int access(const char *pathname, int mode);
在Windows下没有access函数,但在<io.h>文件中有_access函数,声明如下:
int _access(const char* _Filename, int _AccessMode);
解决:使用_access替换access,声明相应的F_OK等:
#ifndef _MSC_VER
#include <unistd.h>
#else
#include <io.h>
#define access _access
#define F_OK 00
#define R_OK 04
#define W_OK 02
#define X_OK 06
#endif
3. “sockaddr”: “struct”类型重定义的错误:
现象:
windows.h和winsock2.h存在有类型重定义,往往体现在VC程序中包含winsock2.h时出现编译错误:
error C2011: “sockaddr_in”:“struct”类型重定义
解决:
在项目属性中,c/c++中的预处理器设置中,添加 WIN32_LEAN_AND_MEAN 的宏定义;