将项目从Visual Studio 2005转换为Visual Studio 2010后,项目似乎不再构建,并且会出现大量C2059
错误,如:
`错误C2059:语法错误:'type'
我们使用的Visual Studio 2010 Professional不提供静态代码分析。
以下是编译1 C文件以供参考的完整日志:
1>------ Build started: Project: VoHR, Configuration: Debug Win32 ------
1> AKAsynch.c
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(88): error C2059: syntax error : 'type'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(107): error C2059: syntax error : '}'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(119): error C2059: syntax error : 'type'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(139): error C2059: syntax error : '}'
答案 0 :(得分:2)
我找出了那些突然编译错误的原因。
在windows.h
的伟大传统中,微软似乎引入了令牌与我们的代码库发生冲突。
在我们的确切案例中,我们有:
#define Null (void*)0
在我们的代码中,我们需要使用offsetof
宏并使其可用#include <stddef.h>
我依次跟踪stddef.h
包括crtdefs.h
,其中包含sal.h
,其中Null
宏似乎与MS标头中的源代码注释发生冲突...... < / p>
作为解决方法,我们做了:
#if defined(_MSC_VER) && _MSC_VER >= 1600
#pragma push_macro("Null")
#undef Null
#endif
#include <stddef.h>
#if defined(_MSC_VER) && _MSC_VER >= 1600
#pragma pop_macro("Null")
#endif
我们使用Null
作为宏是有争议的,但我仍然期望MS找到一种方法来避免与现有代码库的冲突。
希望能帮助那些面临同样问题的人。