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 预处理器指令的主要内容,如果未能解决你的问题,请参考以下文章

预处理器指令

笔记2:预处理器-预处理指令

C#预处理器指令

C#预处理器指令 ,你造吗??? (●'?'●)

C ++中的宏指令和预处理器指令有啥区别[重复]

预处理器宏扩展为另一个预处理器指令