当有人试图在当前.cpp或.h文件中使用STL时,显示错误(在Visual studio中) 在我们公司有时会写.CPP和.h文件,这些文件用于旧WM项目(我们使用嵌入式Visual C++ 3或其他东西)和更现代的代码(VS 2010)。 此嵌入式Visual C++不支持STL。

当有人试图在当前.cpp或.h文件中使用STL时,显示错误(在Visual studio中) 在我们公司有时会写.CPP和.h文件,这些文件用于旧WM项目(我们使用嵌入式Visual C++ 3或其他东西)和更现代的代码(VS 2010)。 此嵌入式Visual C++不支持STL。,c++,visual-studio,stl,C++,Visual Studio,Stl,因此,如果在VS2010中工作的开发人员之一更改了一个共享的文件,并添加了一些函数,例如使用std::vector,那么在他这方面一切都会正常,但构建(相当长)将失败 因此,为了更快地看到这个错误,我想添加如下内容 #if defined(%%STL%%) #error("!!!!") #endif 在使用旧工具集编译的所有文件中。在这种情况下,开发人员甚至可以在VS2010中看到编译时错误 但我找不到可以放在那里的%%STL%% 有什么想法吗?或者可能有人知道如何更好地执行此操作?根据对问题

因此,如果在VS2010中工作的开发人员之一更改了一个共享的文件,并添加了一些函数,例如使用std::vector,那么在他这方面一切都会正常,但构建(相当长)将失败

因此,为了更快地看到这个错误,我想添加如下内容

#if defined(%%STL%%)
#error("!!!!")
#endif
在使用旧工具集编译的所有文件中。在这种情况下,开发人员甚至可以在VS2010中看到编译时错误

但我找不到可以放在那里的%%STL%%


有什么想法吗?或者可能有人知道如何更好地执行此操作?

根据对问题的评论,您可以查看每个不受支持的头文件,并查看它们为其包含保护定义了哪些符号。然后检查正在定义的符号

<微软> C++头>代码> <代码>定义<代码>算法>代码>,以便检查:

#ifdef _ALGORITHM_
#error("<algorithm> included")
#endif
\ifdef\u算法_
#错误(“包括”)
#恩迪夫

这些文件可以收集起来,放在一个头文件中,最后可以包含在每个共享源文件中。

有一个很好的解决方案(至少我没有看到陷阱)

%%STL%%应该是\u STD\u BEGIN


此宏用于“命名空间std{”在VS stl实现中

可能会删除标题,或者监视对标题的访问?或者可能会检查是否定义了stl标题保护?没有更好的方法来教育程序员,让他在长时间等待后查看失败的构建。一定要花些精力设置编码标准,这在任何团队中都很重要。这不是最好的建议:)我需要加快工作过程,而不是惩罚错误Concur.MS only solution-check uCstdlib uu2;向量和算法以及我所看到的所有其他东西,最终包括它,它只是stdlib.h的一个简单包装,但也定义了这个宏。如果一些核心包含定义的STL或其他东西,那会更好,但我看不到它。好主意,but Murphy说这个错误只会在长构建结束时触发。我可以这样做,但最好有1个(或2个)定义,我可以使用。例如,相当多的stl文件最终包括crtdefs.h。所以我可以使用_INC_crtdefs define。但我不确定它是否涵盖所有内容。我问这个问题是希望有人知道这样的定义(使用它,或者只是比我更了解VS stl):)此外,我还需要一个定义,它将在没有误报的情况下工作…我只需要该文件,它仅由所有STL使用,而不是其他文件。唯一的问题是,我只能在.cpp文件中使用它,并且此行必须毕竟是#include语句,但我看不到处理它们的方法,因此。。。