Quantlib 预处理器指令
Posted
技术标签:
【中文标题】Quantlib 预处理器指令【英文标题】:Quantlib preprocessor directives 【发布时间】:2018-05-06 10:03:15 【问题描述】:我从 C++ 中的 Quantlib 开始,并尝试运行示例代码。我一直在关注
中的教程https://www.youtube.com/watch?v=Wn_D19c2ABU&t=569s
当他在 5:36 向预处理器写入以下指令 (?) 时,我感到很困惑:
_SCL_SECURE_NO_DEPRECATE
_CRT_SECURE_NO_DEPRECATE
所以我的问题是:
1) 为什么需要这样做? 2) 这是 Quantlib 的东西还是 Boost 库需要的? 3) 包含外部库时是否总是需要这样做?
假设我想使用不同的定价库,我需要这样做吗?
【问题讨论】:
【参考方案1】:Boost 在其旧版本的文档中这样说:
Microsoft Visual C++ 6.0(sp5,带和不带 STLport)、7.0、7.1、8.0。注意:Boost 不支持 Visual C++ 8.0 附带的非标准“安全”C++ 库,这可能会导致来自 Boost 标头和其他符合标准的 C++ 代码的许多虚假警告。要抑制这些警告,请定义宏 _SCL_SECURE_NO_DEPRECATE。
所以基本上,定义这两个东西可以避免编译器警告。您可以先尝试在没有它们的情况下构建项目,然后仅在需要时添加它们。
【讨论】:
【参考方案2】:这是微软的事情。他们认为标准库函数的某些版本比其他版本更安全。不是每个人都同意。
但是,他们还认为,可能最需要“安全”版本的缺乏经验的用户可能不知道这一点,因此默认情况下会启用警告。
更有经验的程序员可以分辨出其中的区别,也将了解如何关闭警告:
Disabling Warnings generated via _CRT_SECURE_NO_DEPRECATE
【讨论】:
以上是关于Quantlib 预处理器指令的主要内容,如果未能解决你的问题,请参考以下文章