1

在我们公司,有时我们会编写 .cpp 和 .h 文件,这些文件用于旧 WM(我们为此使用 Embedded Visual C++ 3.0 或其他东西)和更现代的代码(VS 2010)的项目中。

此 Embedded Visual C++ 不支持 STL。

因此,如果一位在 VS2010 中工作的开发人员更改了一个共享的文件,并添加了一些使用 std::vector 的函数,例如,在他这边一切都会好起来的,但是构建(相当长) 将失败。

所以为了早点看到这个错误,我想添加类似

#if defined(%%STL%%)
#error("!!!!")
#endif

在所有使用旧工具集编译的文件中。在这种情况下,即使在 VS2010 中,开发人员也可以看到编译时错误。

但我找不到我可以放的东西 %%STL%% 那里。

有任何想法吗?或者也许有人知道我可以如何做到这一点的更好方法?

4

2 回答 2

1

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

EG Microsoft C++ 标头<algorithm>定义_ALGORITHM_,因此您可以检查:

#ifdef _ALGORITHM_
#error("<algorithm> included")
#endif

可以将其中的一堆收集起来并放入一个头文件中,最后您可以将其包含在每个共享源文件中。

于 2012-11-07T21:24:13.510 回答
1

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

%%STL%%应该是_STD_BEGIN

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

于 2012-11-07T22:18:31.083 回答