在Visual Studio中定义宏 - /D或#define?

Rob*_*Rob 4 c++ visual-studio

最近,当将一些STL代码移植到VS2008时,我想std::copy通过定义新_SCL_SECURE_NO_WARNINGS标志来禁用生成的警告.您可以通过两种方式执行此操作:

  • 使用/ D编译器开关,可以在项目属性中指定.您需要确保为Release和Debug构建定义它,我经常忘记这样做.
  • 通过在包含相关STL标头之前定义宏样式,或者在stdafx.h中定义总体覆盖:

    #define _SCL_SECURE_NO_WARNINGS

这两种方法都运行良好但我想知道是否有任何争论支持一方而不是另一方?

Jam*_*ran 10

当您想要在不同的构建上以不同方式定义它时,通常使用/ D选项(因此可以在makefile中更改它)

如果你"总是"希望它以相同的方式设置,请使用#define.


luk*_*uke 5

通过将它们放在项目文件中,您可以在平台特定警告和平台之间保持紧密关联,这对我来说似乎是正确的.

如果他们在代码中,他们总是在代码中,无论它是否适合该平台.对于GCC或可能的Visual C++未来版本,您不需要它.另一方面,通过在代码中使用它,更明显的是它就在那里.如果您移动(复制)代码,则更容易记住使用它移动该定义.

各方面的优点和缺点.因人而异.